soc.2009.penguin.visualstudio: 10b3f93d: Contains a visual studio solution that c...

wade at soc.pidgin.im wade at soc.pidgin.im
Sun Aug 2 09:46:33 EDT 2009


-----------------------------------------------------------------
Revision: 10b3f93df6357cf0329e0bcb06af1c25c9624228
Ancestor: bf38b103d6725932646c88b1d818e113d15e834e
Author: wade at soc.pidgin.im
Date: 2009-08-02T13:42:50
Branch: im.pidgin.soc.2009.penguin.visualstudio
URL: http://d.pidgin.im/viewmtn/revision/info/10b3f93df6357cf0329e0bcb06af1c25c9624228

Deleted entries:
        libpurple/wrapper libpurple/wrapper/Account.cs
        libpurple/wrapper/Accountopt.cs libpurple/wrapper/Blist.cs
        libpurple/wrapper/Buddyicon.cs
        libpurple/wrapper/Certificate.cs libpurple/wrapper/Cipher.cs
        libpurple/wrapper/Circbuffer.cs libpurple/wrapper/Cmds.cs
        libpurple/wrapper/Config.cs libpurple/wrapper/Connection.cs
        libpurple/wrapper/Conversation.cs libpurple/wrapper/Core.cs
        libpurple/wrapper/Debug.cs libpurple/wrapper/Desktopitem.cs
        libpurple/wrapper/Dnsquery.cs libpurple/wrapper/Dnssrv.cs
        libpurple/wrapper/Eventloop.cs libpurple/wrapper/Ft.cs
        libpurple/wrapper/Idle.cs libpurple/wrapper/Imgstore.cs
        libpurple/wrapper/Log.cs libpurple/wrapper/Media.cs
        libpurple/wrapper/Mediamanager.cs libpurple/wrapper/Mime.cs
        libpurple/wrapper/NatPmp.cs libpurple/wrapper/Network.cs
        libpurple/wrapper/Notify.cs libpurple/wrapper/Ntlm.cs
        libpurple/wrapper/Plugin.cs libpurple/wrapper/Pluginpref.cs
        libpurple/wrapper/Pounce.cs libpurple/wrapper/Prefs.cs
        libpurple/wrapper/Privacy.cs libpurple/wrapper/Proxy.cs
        libpurple/wrapper/Prpl.cs libpurple/wrapper/PurpleAccount.cs
        libpurple/wrapper/PurpleAccountUiOps.cs
        libpurple/wrapper/PurpleAttentionType.cs
        libpurple/wrapper/PurpleBlistNode.cs
        libpurple/wrapper/PurpleBlistUiOps.cs
        libpurple/wrapper/PurpleBuddy.cs
        libpurple/wrapper/PurpleBuddyIconSpec.cs
        libpurple/wrapper/PurpleBuddyList.cs
        libpurple/wrapper/PurpleCertificate.cs
        libpurple/wrapper/PurpleCertificatePool.cs
        libpurple/wrapper/PurpleCertificateScheme.cs
        libpurple/wrapper/PurpleCertificateVerificationRequest.cs
        libpurple/wrapper/PurpleCertificateVerifier.cs
        libpurple/wrapper/PurpleChat.cs
        libpurple/wrapper/PurpleCipherOps.cs
        libpurple/wrapper/PurpleCircBuffer.cs
        libpurple/wrapper/PurpleClient.cs
        libpurple/wrapper/PurpleConnection.cs
        libpurple/wrapper/PurpleContact.cs
        libpurple/wrapper/PurpleConvChat.cs
        libpurple/wrapper/PurpleConvChatBuddy.cs
        libpurple/wrapper/PurpleConvIm.cs
        libpurple/wrapper/PurpleConvMessage.cs
        libpurple/wrapper/PurpleConversation.cs
        libpurple/wrapper/PurpleConversationUiOps.cs
        libpurple/wrapper/PurpleEventLoopUiOps.cs
        libpurple/wrapper/PurpleGroup.cs
        libpurple/wrapper/PurpleKeyValuePair.cs
        libpurple/wrapper/PurpleLog.cs
        libpurple/wrapper/PurpleLogCommonLoggerData.cs
        libpurple/wrapper/PurpleLogLogger.cs
        libpurple/wrapper/PurpleLogSet.cs
        libpurple/wrapper/PurpleMenuAction.cs
        libpurple/wrapper/PurplePlugin.cs
        libpurple/wrapper/PurplePluginAction.cs
        libpurple/wrapper/PurplePluginInfo.cs
        libpurple/wrapper/PurplePluginLoaderInfo.cs
        libpurple/wrapper/PurplePluginProtocolInfo.cs
        libpurple/wrapper/PurplePluginUiInfo.cs
        libpurple/wrapper/PurplePounce.cs
        libpurple/wrapper/PurpleRequestField.cs
        libpurple/wrapper/PurpleRoomlist.cs
        libpurple/wrapper/PurpleRoomlistField.cs
        libpurple/wrapper/PurpleRoomlistRoom.cs
        libpurple/wrapper/PurpleRoomlistUiOps.cs
        libpurple/wrapper/PurpleSoundTheme.cs
        libpurple/wrapper/PurpleSoundThemeClass.cs
        libpurple/wrapper/PurpleSoundThemeLoader.cs
        libpurple/wrapper/PurpleSoundThemeLoaderClass.cs
        libpurple/wrapper/PurpleSoundUiOps.cs
        libpurple/wrapper/PurpleSrvResponse.cs
        libpurple/wrapper/PurpleSslConnection.cs
        libpurple/wrapper/PurpleStunNatDiscovery.cs
        libpurple/wrapper/PurpleTheme.cs
        libpurple/wrapper/PurpleThemeClass.cs
        libpurple/wrapper/PurpleThemeLoader.cs
        libpurple/wrapper/PurpleThemeLoaderClass.cs
        libpurple/wrapper/PurpleThemeManager.cs
        libpurple/wrapper/PurpleThemeManagerClass.cs
        libpurple/wrapper/PurpleWhiteboard.cs
        libpurple/wrapper/PurpleWhiteboardPrplOps.cs
        libpurple/wrapper/PurpleWhiteboardUiOps.cs
        libpurple/wrapper/PurpleWrapper.csproj
        libpurple/wrapper/PurpleXfer.cs libpurple/wrapper/Request.cs
        libpurple/wrapper/Roomlist.cs
        libpurple/wrapper/Savedstatuses.cs
        libpurple/wrapper/Server.cs libpurple/wrapper/Signals.cs
        libpurple/wrapper/Smiley.cs libpurple/wrapper/Sound.cs
        libpurple/wrapper/SoundTheme.cs
        libpurple/wrapper/SoundThemeLoader.cs
        libpurple/wrapper/Sslconn.cs libpurple/wrapper/Status.cs
        libpurple/wrapper/Stringref.cs libpurple/wrapper/Stun.cs
        libpurple/wrapper/Theme.cs libpurple/wrapper/ThemeLoader.cs
        libpurple/wrapper/ThemeManager.cs
        libpurple/wrapper/UnmanagedWrapper.cs
        libpurple/wrapper/Upnp.cs libpurple/wrapper/Util.cs
        libpurple/wrapper/Value.cs libpurple/wrapper/Version.cs
        libpurple/wrapper/Whiteboard.cs
        libpurple/wrapper/XMLNodeClass.cs
        libpurple/wrapper/generator
        libpurple/wrapper/generator/CArgument.cs
        libpurple/wrapper/generator/CEnum.cs
        libpurple/wrapper/generator/CFile.cs
        libpurple/wrapper/generator/CFunction.cs
        libpurple/wrapper/generator/CNamed.cs
        libpurple/wrapper/generator/CStruct.cs
        libpurple/wrapper/generator/CTyped.cs
        libpurple/wrapper/generator/Logger.cs
        libpurple/wrapper/generator/Program.cs
        libpurple/wrapper/generator/Scripts.csproj
        libpurple/wrapper/generator/UnableToCreateWrapperException.cs
        libpurple/wrapper/generator/WrapperGenerator.cs
        libpurple/wrapper/proto_chat_entry.cs
        libpurple/wrapper/xmlnode.cs
Added files:
        libpurple/win32/vs9/libpurple.vcproj
        libpurple/wrapper/Account.cs libpurple/wrapper/Accountopt.cs
        libpurple/wrapper/Blist.cs libpurple/wrapper/Buddyicon.cs
        libpurple/wrapper/Certificate.cs libpurple/wrapper/Cipher.cs
        libpurple/wrapper/Circbuffer.cs libpurple/wrapper/Cmds.cs
        libpurple/wrapper/Config.cs libpurple/wrapper/Connection.cs
        libpurple/wrapper/Conversation.cs libpurple/wrapper/Core.cs
        libpurple/wrapper/Debug.cs libpurple/wrapper/Desktopitem.cs
        libpurple/wrapper/Dnsquery.cs libpurple/wrapper/Dnssrv.cs
        libpurple/wrapper/Eventloop.cs libpurple/wrapper/Ft.cs
        libpurple/wrapper/Idle.cs libpurple/wrapper/Imgstore.cs
        libpurple/wrapper/Log.cs libpurple/wrapper/Media.cs
        libpurple/wrapper/Mediamanager.cs libpurple/wrapper/Mime.cs
        libpurple/wrapper/NatPmp.cs libpurple/wrapper/Network.cs
        libpurple/wrapper/Notify.cs libpurple/wrapper/Ntlm.cs
        libpurple/wrapper/Plugin.cs libpurple/wrapper/Pluginpref.cs
        libpurple/wrapper/Pounce.cs libpurple/wrapper/Prefs.cs
        libpurple/wrapper/Privacy.cs libpurple/wrapper/Proxy.cs
        libpurple/wrapper/Prpl.cs libpurple/wrapper/PurpleAccount.cs
        libpurple/wrapper/PurpleAccountUiOps.cs
        libpurple/wrapper/PurpleAttentionType.cs
        libpurple/wrapper/PurpleBlistNode.cs
        libpurple/wrapper/PurpleBlistUiOps.cs
        libpurple/wrapper/PurpleBuddy.cs
        libpurple/wrapper/PurpleBuddyIconSpec.cs
        libpurple/wrapper/PurpleBuddyList.cs
        libpurple/wrapper/PurpleCertificate.cs
        libpurple/wrapper/PurpleCertificatePool.cs
        libpurple/wrapper/PurpleCertificateScheme.cs
        libpurple/wrapper/PurpleCertificateVerificationRequest.cs
        libpurple/wrapper/PurpleCertificateVerifier.cs
        libpurple/wrapper/PurpleChat.cs
        libpurple/wrapper/PurpleCipherOps.cs
        libpurple/wrapper/PurpleCircBuffer.cs
        libpurple/wrapper/PurpleClient.cs
        libpurple/wrapper/PurpleConnection.cs
        libpurple/wrapper/PurpleContact.cs
        libpurple/wrapper/PurpleConvChat.cs
        libpurple/wrapper/PurpleConvChatBuddy.cs
        libpurple/wrapper/PurpleConvIm.cs
        libpurple/wrapper/PurpleConvMessage.cs
        libpurple/wrapper/PurpleConversation.cs
        libpurple/wrapper/PurpleConversationUiOps.cs
        libpurple/wrapper/PurpleEventLoopUiOps.cs
        libpurple/wrapper/PurpleGroup.cs
        libpurple/wrapper/PurpleKeyValuePair.cs
        libpurple/wrapper/PurpleLog.cs
        libpurple/wrapper/PurpleLogCommonLoggerData.cs
        libpurple/wrapper/PurpleLogLogger.cs
        libpurple/wrapper/PurpleLogSet.cs
        libpurple/wrapper/PurpleMenuAction.cs
        libpurple/wrapper/PurplePlugin.cs
        libpurple/wrapper/PurplePluginAction.cs
        libpurple/wrapper/PurplePluginInfo.cs
        libpurple/wrapper/PurplePluginLoaderInfo.cs
        libpurple/wrapper/PurplePluginProtocolInfo.cs
        libpurple/wrapper/PurplePluginUiInfo.cs
        libpurple/wrapper/PurplePounce.cs
        libpurple/wrapper/PurpleRequestField.cs
        libpurple/wrapper/PurpleRoomlist.cs
        libpurple/wrapper/PurpleRoomlistField.cs
        libpurple/wrapper/PurpleRoomlistRoom.cs
        libpurple/wrapper/PurpleRoomlistUiOps.cs
        libpurple/wrapper/PurpleSoundTheme.cs
        libpurple/wrapper/PurpleSoundThemeClass.cs
        libpurple/wrapper/PurpleSoundThemeLoader.cs
        libpurple/wrapper/PurpleSoundThemeLoaderClass.cs
        libpurple/wrapper/PurpleSoundUiOps.cs
        libpurple/wrapper/PurpleSrvResponse.cs
        libpurple/wrapper/PurpleSslConnection.cs
        libpurple/wrapper/PurpleStunNatDiscovery.cs
        libpurple/wrapper/PurpleTheme.cs
        libpurple/wrapper/PurpleThemeClass.cs
        libpurple/wrapper/PurpleThemeLoader.cs
        libpurple/wrapper/PurpleThemeLoaderClass.cs
        libpurple/wrapper/PurpleThemeManager.cs
        libpurple/wrapper/PurpleThemeManagerClass.cs
        libpurple/wrapper/PurpleWhiteboard.cs
        libpurple/wrapper/PurpleWhiteboardPrplOps.cs
        libpurple/wrapper/PurpleWhiteboardUiOps.cs
        libpurple/wrapper/PurpleWrapper.csproj
        libpurple/wrapper/PurpleXfer.cs libpurple/wrapper/Request.cs
        libpurple/wrapper/Roomlist.cs
        libpurple/wrapper/Savedstatuses.cs
        libpurple/wrapper/Server.cs libpurple/wrapper/Signals.cs
        libpurple/wrapper/Smiley.cs libpurple/wrapper/Sound.cs
        libpurple/wrapper/SoundTheme.cs
        libpurple/wrapper/SoundThemeLoader.cs
        libpurple/wrapper/Sslconn.cs libpurple/wrapper/Status.cs
        libpurple/wrapper/Stringref.cs libpurple/wrapper/Stun.cs
        libpurple/wrapper/Theme.cs libpurple/wrapper/ThemeLoader.cs
        libpurple/wrapper/ThemeManager.cs
        libpurple/wrapper/UnmanagedWrapper.cs
        libpurple/wrapper/Upnp.cs libpurple/wrapper/Util.cs
        libpurple/wrapper/Value.cs libpurple/wrapper/Version.cs
        libpurple/wrapper/Whiteboard.cs
        libpurple/wrapper/XMLNodeClass.cs
        libpurple/wrapper/generator/CArgument.cs
        libpurple/wrapper/generator/CFunction.cs
        libpurple/wrapper/generator/CNamed.cs
        libpurple/wrapper/generator/CTyped.cs
        libpurple/wrapper/generator/Logger.cs
        libpurple/wrapper/generator/Program.cs
        libpurple/wrapper/generator/Properties/AssemblyInfo.cs
        libpurple/wrapper/generator/PurpleTranslations.cs
        libpurple/wrapper/generator/Scripts.csproj
        libpurple/wrapper/generator/Scripts.sln
        libpurple/wrapper/generator/Scripts.suo
        libpurple/wrapper/generator/WrapperGenerator.cs
        libpurple/wrapper/proto_chat_entry.cs
        libpurple/wrapper/xmlnode.cs penguin/GLib/README.txt
        penguin/Penguin/Penguin.csproj penguin/Penguin/Program.cs
        penguin/Penguin/Properties/AssemblyInfo.cs
        penguin/Penguin/Properties/Resources.Designer.cs
        penguin/Penguin/Properties/Resources.resx
        penguin/Penguin/Properties/Settings.Designer.cs
        penguin/Penguin/Properties/Settings.settings
        penguin/Penguin/WelcomeForm.Designer.cs
        penguin/Penguin/WelcomeForm.cs penguin/Penguin.sln
        penguin/README.txt
Added directories:
        libpurple/win32/vs9 libpurple/wrapper
        libpurple/wrapper/generator
        libpurple/wrapper/generator/Properties penguin penguin/GLib
        penguin/Penguin penguin/Penguin/Properties
Modified files:
        libpurple/config.h
Modified attrs:
        libpurple/wrapper/generator/Scripts.suo

ChangeLog: 

Contains a visual studio solution that completely, natively compiles libpurple in Visual Studio. However, it currently does not link libxml2 correctly. There is a working version locally with modified libxml2 source, but the goal is to have a build with a clean or nearly clean copy of the libxml2 source.


-------------- next part --------------
============================================================
--- libpurple/win32/vs9/libpurple.vcproj	83822b240c47011e2d2be43ca39ff2105eb58396
+++ libpurple/win32/vs9/libpurple.vcproj	83822b240c47011e2d2be43ca39ff2105eb58396
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="libpurple"
+	ProjectGUID="{9F347485-0492-4473-B597-0444687EEE3F}"
+	RootNamespace="libpurple"
+	AssemblyReferenceSearchPaths="&quot;..\..\..\penguin\libxml&quot;"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(SolutionDir)vsprops\$(ConfigurationName)-$(PlatformName).vsprops"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(IntDir)\..\..\include\glib-2.0&quot;;&quot;$(IntDir)\..\..\lib\glib-2.0\include&quot;;&quot;$(ProjectDir)..\..&quot;;&quot;$(ProjectDir)..\..\win32&quot;;&quot;$(SolutionDir)&quot;"
+				PreprocessorDefinitions="HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Ws2_32.lib"
+				OutputFile="$(OutDir)\bin\$(ProjectName).dll"
+				ModuleDefinitionFile=""
+				GenerateDebugInformation="true"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="true"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+		<ProjectReference
+			ReferencedProjectIdentifier="{12BCA020-EABF-429E-876A-A476BC9C10C0}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libglib.vcproj"
+		/>
+		<ProjectReference
+			ReferencedProjectIdentifier="{4214047C-F5C1-40B3-8369-5DCED8C32770}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libgmodule.vcproj"
+		/>
+		<ProjectReference
+			ReferencedProjectIdentifier="{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libgthread.vcproj"
+		/>
+		<ProjectReference
+			ReferencedProjectIdentifier="{F172EFFC-E30F-4593-809E-DB2024B1E753}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libgobject.vcproj"
+		/>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\account.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\accountopt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\blist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\buddyicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\certificate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\cipher.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\circbuffer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\cmds.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\conversation.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\core.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\debug.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\dnsquery.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\dnssrv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\eventloop.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ft.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\idle.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\imgstore.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\media.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\mediamanager.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\mime.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\nat-pmp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\network.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\notify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ntlm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\plugin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pluginpref.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pounce.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\prefs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\privacy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\proxy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\prpl.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\request.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\roomlist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\savedstatuses.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\server.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\signals.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\smiley.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sound-theme-loader.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sound-theme.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sound.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sslconn.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\status.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\stringref.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\stun.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\theme-loader.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\theme-manager.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\theme.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\upnp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\value.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\version.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\whiteboard.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\xmlnode.c"
+				>
+			</File>
+			<Filter
+				Name="win32"
+				>
+				<File
+					RelativePath="..\..\win32\giowin32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\libc_interface.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\win32dep.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<Filter
+				Name="win32"
+				>
+				<File
+					RelativePath="..\..\win32\libc_interface.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\libc_internal.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\win32dep.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\wpurpleerror.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
============================================================
--- libpurple/wrapper/Account.cs	0d38f3dc4287fa2798aad73f495689ff39c32730
+++ libpurple/wrapper/Account.cs	0d38f3dc4287fa2798aad73f495689ff39c32730
@@ -0,0 +1,1088 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: account.h
+	 */
+	public class Account
+	{
+		public enum PurpleAccountRequestType
+		{
+			PURPLE_ACCOUNT_REQUEST_AUTHORIZATION = 0
+		};
+
+		public delegate bool PurpleFilterAccountFunc(IntPtr account);
+		public delegate void PurpleAccountRequestAuthorizationCb(IntPtr _PurpleWrapper_arg0);
+		public delegate void PurpleAccountRegistrationCb(IntPtr account, bool succeeded, IntPtr user_data);
+		public delegate void PurpleAccountUnregistrationCb(IntPtr account, bool succeeded, IntPtr user_data);
+
+		/*
+		 * Function Name: purple_account_new
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_account_new(char * username, char * protocol_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_new(string username, string protocol_id);
+
+		public static PurpleAccount New(string username, string protocol_id)
+		{
+			return new PurpleAccount(purple_account_new(username, protocol_id));
+		}
+
+		/*
+		 * Function Name: purple_account_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_destroy(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_destroy(IntPtr account);
+
+		public static void Destroy(PurpleAccount account)
+		{
+			purple_account_destroy(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_connect
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_connect(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_connect(IntPtr account);
+
+		public static void Connect(PurpleAccount account)
+		{
+			purple_account_connect(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_register_callback
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_register_callback(PurpleAccount * account, PurpleAccountRegistrationCb cb, void * user_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_register_callback(IntPtr account, IntPtr cb, IntPtr user_data);
+
+		public static void SetRegisterCallback(PurpleAccount account, Account.PurpleAccountRegistrationCb cb, IntPtr user_data)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_register
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_register(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_register(IntPtr account);
+
+		public static void Register(PurpleAccount account)
+		{
+			purple_account_register(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_unregister(PurpleAccount * account, PurpleAccountUnregistrationCb cb, void * user_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_unregister(IntPtr account, IntPtr cb, IntPtr user_data);
+
+		public static void Unregister(PurpleAccount account, Account.PurpleAccountUnregistrationCb cb, IntPtr user_data)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_disconnect
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_disconnect(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_disconnect(IntPtr account);
+
+		public static void Disconnect(PurpleAccount account)
+		{
+			purple_account_disconnect(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_request_close_with_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_close_with_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_close_with_account(IntPtr account);
+
+		public static void RequestCloseWithAccount(PurpleAccount account)
+		{
+			purple_account_request_close_with_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_request_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_close(void * ui_handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_close(IntPtr ui_handle);
+
+		public static void RequestClose(IntPtr ui_handle)
+		{
+			purple_account_request_close(ui_handle);
+		}
+
+		/*
+		 * Function Name: purple_account_request_change_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_change_password(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_change_password(IntPtr account);
+
+		public static void RequestChangePassword(PurpleAccount account)
+		{
+			purple_account_request_change_password(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_request_change_user_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_change_user_info(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_change_user_info(IntPtr account);
+
+		public static void RequestChangeUserInfo(PurpleAccount account)
+		{
+			purple_account_request_change_user_info(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_username
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_username(PurpleAccount * account, char * username)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_username(IntPtr account, string username);
+
+		public static void SetUsername(PurpleAccount account, string username)
+		{
+			purple_account_set_username(account.Reference, username);
+		}
+
+		/*
+		 * Function Name: purple_account_set_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_password(PurpleAccount * account, char * password)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_password(IntPtr account, string password);
+
+		public static void SetPassword(PurpleAccount account, string password)
+		{
+			purple_account_set_password(account.Reference, password);
+		}
+
+		/*
+		 * Function Name: purple_account_set_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_alias(PurpleAccount * account, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_alias(IntPtr account, string alias);
+
+		public static void SetAlias(PurpleAccount account, string alias)
+		{
+			purple_account_set_alias(account.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_account_set_user_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_user_info(PurpleAccount * account, char * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_user_info(IntPtr account, string user_info);
+
+		public static void SetUserInfo(PurpleAccount account, string user_info)
+		{
+			purple_account_set_user_info(account.Reference, user_info);
+		}
+
+		/*
+		 * Function Name: purple_account_set_buddy_icon_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_buddy_icon_path(PurpleAccount * account, char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_buddy_icon_path(IntPtr account, string path);
+
+		public static void SetBuddyIconPath(PurpleAccount account, string path)
+		{
+			purple_account_set_buddy_icon_path(account.Reference, path);
+		}
+
+		/*
+		 * Function Name: purple_account_set_connection
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_connection(PurpleAccount * account, PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_connection(IntPtr account, IntPtr gc);
+
+		public static void SetConnection(PurpleAccount account, PurpleConnection gc)
+		{
+			purple_account_set_connection(account.Reference, gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_remember_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_remember_password(PurpleAccount * account, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_remember_password(IntPtr account, bool value);
+
+		public static void SetRememberPassword(PurpleAccount account, bool value)
+		{
+			purple_account_set_remember_password(account.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_account_set_check_mail
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_check_mail(PurpleAccount * account, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_check_mail(IntPtr account, bool value);
+
+		public static void SetCheckMail(PurpleAccount account, bool value)
+		{
+			purple_account_set_check_mail(account.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_account_set_proxy_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_proxy_info(PurpleAccount * account, PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_proxy_info(IntPtr account, IntPtr info);
+
+		public static void SetProxyInfo(PurpleAccount account, /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_set_status_types
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_status_types(PurpleAccount * account, GList * status_types)
+		 * 
+		 * Could not generate a wrapper for purple_account_set_status_types in file "account.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_account_clear_settings
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_clear_settings(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_clear_settings(IntPtr account);
+
+		public static void ClearSettings(PurpleAccount account)
+		{
+			purple_account_clear_settings(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_int(PurpleAccount * account, char * name, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_int(IntPtr account, string name, int value);
+
+		public static void SetInt(PurpleAccount account, string name, int value)
+		{
+			purple_account_set_int(account.Reference, name, value);
+		}
+
+		/*
+		 * Function Name: purple_account_is_connected
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_is_connected(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_is_connected(IntPtr account);
+
+		public static bool IsConnected(PurpleAccount account)
+		{
+			return purple_account_is_connected(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_is_connecting
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_is_connecting(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_is_connecting(IntPtr account);
+
+		public static bool IsConnecting(PurpleAccount account)
+		{
+			return purple_account_is_connecting(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_is_disconnected
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_is_disconnected(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_is_disconnected(IntPtr account);
+
+		public static bool IsDisconnected(PurpleAccount account)
+		{
+			return purple_account_is_disconnected(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_username
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_username(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_username(IntPtr account);
+
+		public static string GetUsername(PurpleAccount account)
+		{
+			return purple_account_get_username(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_password
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_password(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_password(IntPtr account);
+
+		public static string GetPassword(PurpleAccount account)
+		{
+			return purple_account_get_password(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_alias(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_alias(IntPtr account);
+
+		public static string GetAlias(PurpleAccount account)
+		{
+			return purple_account_get_alias(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_user_info
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_user_info(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_user_info(IntPtr account);
+
+		public static string GetUserInfo(PurpleAccount account)
+		{
+			return purple_account_get_user_info(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_buddy_icon_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_buddy_icon_path(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_buddy_icon_path(IntPtr account);
+
+		public static string GetBuddyIconPath(PurpleAccount account)
+		{
+			return purple_account_get_buddy_icon_path(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_protocol_id
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_protocol_id(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_protocol_id(IntPtr account);
+
+		public static string GetProtocolId(PurpleAccount account)
+		{
+			return purple_account_get_protocol_id(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_protocol_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_protocol_name(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_protocol_name(IntPtr account);
+
+		public static string GetProtocolName(PurpleAccount account)
+		{
+			return purple_account_get_protocol_name(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_connection
+		 * Function Type: PurpleConnection *
+		 * Function RawType: PurpleConnection
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConnection * purple_account_get_connection(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_connection(IntPtr account);
+
+		public static PurpleConnection GetConnection(PurpleAccount account)
+		{
+			return new PurpleConnection(purple_account_get_connection(account.Reference));
+		}
+
+		/*
+		 * Function Name: purple_account_get_remember_password
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_get_remember_password(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_get_remember_password(IntPtr account);
+
+		public static bool GetRememberPassword(PurpleAccount account)
+		{
+			return purple_account_get_remember_password(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_check_mail
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_get_check_mail(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_get_check_mail(IntPtr account);
+
+		public static bool GetCheckMail(PurpleAccount account)
+		{
+			return purple_account_get_check_mail(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_proxy_info
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_account_get_proxy_info(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_proxy_info(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr GetProxyInfo(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_proxy_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_active_status
+		 * Function Type: PurpleStatus *
+		 * Function RawType: PurpleStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStatus * purple_account_get_active_status(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_active_status(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr GetActiveStatus(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_active_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_presence
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_account_get_presence(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_presence(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr GetPresence(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_status_types
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_account_get_status_types(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_status_types(IntPtr account);
+
+		public static IList<string> GetStatusTypes(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_status_types, a PointerToGList. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_log
+		 * Function Type: PurpleLog *
+		 * Function RawType: PurpleLog
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleLog * purple_account_get_log(PurpleAccount * account, gboolean create)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_log(IntPtr account, bool create);
+
+		public static PurpleLog GetLog(PurpleAccount account, bool create)
+		{
+			return new PurpleLog(purple_account_get_log(account.Reference, create));
+		}
+
+		/*
+		 * Function Name: purple_account_destroy_log
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_destroy_log(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_destroy_log(IntPtr account);
+
+		public static void DestroyLog(PurpleAccount account)
+		{
+			purple_account_destroy_log(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_add_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_add_buddy(PurpleAccount * account, PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_add_buddy(IntPtr account, IntPtr buddy);
+
+		public static void AddBuddy(PurpleAccount account, PurpleBuddy buddy)
+		{
+			purple_account_add_buddy(account.Reference, buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_add_buddies
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_add_buddies(PurpleAccount * account, GList * buddies)
+		 * 
+		 * Could not generate a wrapper for purple_account_add_buddies in file "account.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_account_remove_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_remove_group(PurpleAccount * account, PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_remove_group(IntPtr account, IntPtr group);
+
+		public static void RemoveGroup(PurpleAccount account, PurpleGroup group)
+		{
+			purple_account_remove_group(account.Reference, group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_supports_offline_message
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_supports_offline_message(PurpleAccount * account, PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_supports_offline_message(IntPtr account, IntPtr buddy);
+
+		public static bool SupportsOfflineMessage(PurpleAccount account, PurpleBuddy buddy)
+		{
+			return purple_account_supports_offline_message(account.Reference, buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_current_error
+		 * Function Type: PurpleConnectionErrorInfo *
+		 * Function RawType: PurpleConnectionErrorInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleConnectionErrorInfo * purple_account_get_current_error(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_current_error(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleConnectionErrorInfo */ IntPtr GetCurrentError(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_current_error, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_clear_current_error
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_clear_current_error(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_clear_current_error(IntPtr account);
+
+		public static void ClearCurrentError(PurpleAccount account)
+		{
+			purple_account_clear_current_error(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_add(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_add(IntPtr account);
+
+		public static void AccountsAdd(PurpleAccount account)
+		{
+			purple_accounts_add(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_remove
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_remove(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_remove(IntPtr account);
+
+		public static void AccountsRemove(PurpleAccount account)
+		{
+			purple_accounts_remove(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_delete
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_delete(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_delete(IntPtr account);
+
+		public static void AccountsDelete(PurpleAccount account)
+		{
+			purple_accounts_delete(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_reorder
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_reorder(PurpleAccount * account, gint new_index)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_reorder(IntPtr account, int new_index);
+
+		public static void AccountsReorder(PurpleAccount account, int new_index)
+		{
+			purple_accounts_reorder(account.Reference, new_index);
+		}
+
+		/*
+		 * Function Name: purple_accounts_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_accounts_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_accounts_get_all in file "account.h".
+		 * Message: Unknown inner-type of argument 0 of purple_accounts_get_all
+		 */
+
+		/*
+		 * Function Name: purple_accounts_get_all_active
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_accounts_get_all_active()
+		 * 
+		 * Could not generate a wrapper for purple_accounts_get_all_active in file "account.h".
+		 * Message: Unknown inner-type of argument 0 of purple_accounts_get_all_active
+		 */
+
+		/*
+		 * Function Name: purple_accounts_find
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_accounts_find(char * name, char * protocol)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_accounts_find(string name, string protocol);
+
+		public static PurpleAccount AccountsFind(string name, string protocol)
+		{
+			return new PurpleAccount(purple_accounts_find(name, protocol));
+		}
+
+		/*
+		 * Function Name: purple_accounts_restore_current_statuses
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_restore_current_statuses()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_restore_current_statuses();
+
+		public static void AccountsRestoreCurrentStatuses()
+		{
+			purple_accounts_restore_current_statuses();
+		}
+
+		/*
+		 * Function Name: purple_accounts_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_set_ui_ops(PurpleAccountUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_set_ui_ops(IntPtr ops);
+
+		public static void AccountsSetUiOps(PurpleAccountUiOps ops)
+		{
+			purple_accounts_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_get_ui_ops
+		 * Function Type: PurpleAccountUiOps *
+		 * Function RawType: PurpleAccountUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccountUiOps * purple_accounts_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_accounts_get_ui_ops();
+
+		public static PurpleAccountUiOps AccountsGetUiOps()
+		{
+			return new PurpleAccountUiOps(purple_accounts_get_ui_ops());
+		}
+
+		/*
+		 * Function Name: purple_accounts_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_accounts_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_accounts_get_handle();
+
+		public static IntPtr AccountsGetHandle()
+		{
+			return purple_accounts_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_accounts_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_init();
+
+		public static void AccountsInit()
+		{
+			purple_accounts_init();
+		}
+
+		/*
+		 * Function Name: purple_accounts_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_uninit();
+
+		public static void AccountsUninit()
+		{
+			purple_accounts_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Accountopt.cs	20f2d43ab0bbfa51c1eda5dcd17e4e55145246cb
+++ libpurple/wrapper/Accountopt.cs	20f2d43ab0bbfa51c1eda5dcd17e4e55145246cb
@@ -0,0 +1,310 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: accountopt.h
+	 */
+	public class Accountopt
+	{
+
+		/*
+		 * Function Name: purple_account_option_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_option_destroy(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_option_destroy(IntPtr option);
+
+		public static void AccountOptionDestroy(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_set_masked
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_option_set_masked(PurpleAccountOption * option, gboolean masked)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_option_set_masked(IntPtr option, bool masked);
+
+		public static void AccountOptionSetMasked(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option, bool masked)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_set_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_option_set_list(PurpleAccountOption * option, GList * values)
+		 * 
+		 * Could not generate a wrapper for purple_account_option_set_list in file "accountopt.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_account_option_get_type
+		 * Function Type: PurplePrefType
+		 * Function RawType: PurplePrefType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePrefType purple_account_option_get_type(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Prefs.PurplePrefType purple_account_option_get_type(IntPtr option);
+
+		public static Prefs.PurplePrefType AccountOptionGetType(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_text
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_option_get_text(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_option_get_text(IntPtr option);
+
+		public static string AccountOptionGetText(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_setting
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_option_get_setting(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_option_get_setting(IntPtr option);
+
+		public static string AccountOptionGetSetting(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_default_bool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_option_get_default_bool(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_option_get_default_bool(IntPtr option);
+
+		public static bool AccountOptionGetDefaultBool(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_default_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_account_option_get_default_int(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_account_option_get_default_int(IntPtr option);
+
+		public static int AccountOptionGetDefaultInt(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_masked
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_option_get_masked(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_option_get_masked(IntPtr option);
+
+		public static bool AccountOptionGetMasked(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_account_option_get_list(PurpleAccountOption * option)
+		 * 
+		 * Could not generate a wrapper for purple_account_option_get_list in file "accountopt.h".
+		 * Message: Unknown inner-type of argument 0 of purple_account_option_get_list
+		 */
+
+		/*
+		 * Function Name: purple_account_user_split_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_user_split_destroy(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_user_split_destroy(IntPtr split);
+
+		public static void AccountUserSplitDestroy(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_get_text
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_user_split_get_text(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_user_split_get_text(IntPtr split);
+
+		public static string AccountUserSplitGetText(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_get_separator
+		 * Function Type: char
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char purple_account_user_split_get_separator(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern char purple_account_user_split_get_separator(IntPtr split);
+
+		public static char AccountUserSplitGetSeparator(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_get_reverse
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_user_split_get_reverse(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_user_split_get_reverse(IntPtr split);
+
+		public static bool AccountUserSplitGetReverse(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_set_reverse
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_user_split_set_reverse(PurpleAccountUserSplit * split, gboolean reverse)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_user_split_set_reverse(IntPtr split, bool reverse);
+
+		public static void AccountUserSplitSetReverse(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split, bool reverse)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Blist.cs	e9937a087f1403d6864f4da4c13f2b11b5a7f46c
+++ libpurple/wrapper/Blist.cs	e9937a087f1403d6864f4da4c13f2b11b5a7f46c
@@ -0,0 +1,1679 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 */
+	public class Blist
+	{
+		public enum PurpleBlistNodeType
+		{
+			PURPLE_BLIST_GROUP_NODE,
+			PURPLE_BLIST_CONTACT_NODE,
+			PURPLE_BLIST_BUDDY_NODE,
+			PURPLE_BLIST_CHAT_NODE,
+			PURPLE_BLIST_OTHER_NODE
+		};
+
+		public enum PurpleBlistNodeFlags
+		{
+			PURPLE_BLIST_NODE_FLAG_NO_SAVE = 1 << 0
+		};
+
+
+		/*
+		 * Function Name: purple_blist_new
+		 * Function Type: PurpleBuddyList *
+		 * Function RawType: PurpleBuddyList
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddyList * purple_blist_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_new();
+
+		public static PurpleBuddyList New()
+		{
+			return new PurpleBuddyList(purple_blist_new());
+		}
+
+		/*
+		 * Function Name: purple_set_blist
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_set_blist(PurpleBuddyList * blist)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_set_blist(IntPtr blist);
+
+		public static void SetBlist(PurpleBuddyList blist)
+		{
+			purple_set_blist(blist.Reference);
+		}
+
+		/*
+		 * Function Name: purple_get_blist
+		 * Function Type: PurpleBuddyList *
+		 * Function RawType: PurpleBuddyList
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddyList * purple_get_blist()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_get_blist();
+
+		public static PurpleBuddyList GetBlist()
+		{
+			return new PurpleBuddyList(purple_get_blist());
+		}
+
+		/*
+		 * Function Name: purple_blist_get_root
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_get_root()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_root();
+
+		public static PurpleBlistNode GetRoot()
+		{
+			return new PurpleBlistNode(purple_blist_get_root());
+		}
+
+		/*
+		 * Function Name: purple_blist_get_buddies
+		 * Function Type: GSList *
+		 * Function RawType: GSList
+		 * Function Category: PointerToGSList
+		 */
+		/*
+		 * GSList * purple_blist_get_buddies()
+		 * 
+		 * Could not generate a wrapper for purple_blist_get_buddies in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_blist_get_buddies
+		 */
+
+		/*
+		 * Function Name: purple_blist_get_ui_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_blist_get_ui_data()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_ui_data();
+
+		public static IntPtr GetUiData()
+		{
+			return purple_blist_get_ui_data();
+		}
+
+		/*
+		 * Function Name: purple_blist_set_ui_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_set_ui_data(gpointer ui_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_set_ui_data(IntPtr ui_data);
+
+		public static void SetUiData(IntPtr ui_data)
+		{
+			purple_blist_set_ui_data(ui_data);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_next
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_next(PurpleBlistNode * node, gboolean offline)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_next(IntPtr node, bool offline);
+
+		public static PurpleBlistNode NodeNext(PurpleBlistNode node, bool offline)
+		{
+			return new PurpleBlistNode(purple_blist_node_next(node.Reference, offline));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_parent
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_parent(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_parent(IntPtr node);
+
+		public static PurpleBlistNode NodeGetParent(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_parent(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_first_child
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_first_child(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_first_child(IntPtr node);
+
+		public static PurpleBlistNode NodeGetFirstChild(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_first_child(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_sibling_next
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_sibling_next(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_sibling_next(IntPtr node);
+
+		public static PurpleBlistNode NodeGetSiblingNext(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_sibling_next(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_sibling_prev
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_sibling_prev(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_sibling_prev(IntPtr node);
+
+		public static PurpleBlistNode NodeGetSiblingPrev(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_sibling_prev(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_ui_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_blist_node_get_ui_data(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_ui_data(IntPtr node);
+
+		public static IntPtr NodeGetUiData(PurpleBlistNode node)
+		{
+			return purple_blist_node_get_ui_data(node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_ui_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_ui_data(PurpleBlistNode * node, gpointer ui_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_ui_data(IntPtr node, IntPtr ui_data);
+
+		public static void NodeSetUiData(PurpleBlistNode node, IntPtr ui_data)
+		{
+			purple_blist_node_set_ui_data(node.Reference, ui_data);
+		}
+
+		/*
+		 * Function Name: purple_blist_show
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_show()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_show();
+
+		public static void Show()
+		{
+			purple_blist_show();
+		}
+
+		/*
+		 * Function Name: purple_blist_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_destroy()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_destroy();
+
+		public static void Destroy()
+		{
+			purple_blist_destroy();
+		}
+
+		/*
+		 * Function Name: purple_blist_set_visible
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_set_visible(gboolean show)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_set_visible(bool show);
+
+		public static void SetVisible(bool show)
+		{
+			purple_blist_set_visible(show);
+		}
+
+		/*
+		 * Function Name: purple_blist_update_buddy_status
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_update_buddy_status(PurpleBuddy * buddy, PurpleStatus * old_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_update_buddy_status(IntPtr buddy, IntPtr old_status);
+
+		public static void UpdateBuddyStatus(PurpleBuddy buddy, /* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr old_status)
+		{
+			/* Unable to process old_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_update_node_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_update_node_icon(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_update_node_icon(IntPtr node);
+
+		public static void UpdateNodeIcon(PurpleBlistNode node)
+		{
+			purple_blist_update_node_icon(node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_update_buddy_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_update_buddy_icon(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_update_buddy_icon(IntPtr buddy);
+
+		public static void UpdateBuddyIcon(PurpleBuddy buddy)
+		{
+			purple_blist_update_buddy_icon(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_rename_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_rename_buddy(PurpleBuddy * buddy, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_rename_buddy(IntPtr buddy, string name);
+
+		public static void RenameBuddy(PurpleBuddy buddy, string name)
+		{
+			purple_blist_rename_buddy(buddy.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_blist_alias_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_alias_contact(PurpleContact * contact, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_alias_contact(IntPtr contact, string alias);
+
+		public static void AliasContact(PurpleContact contact, string alias)
+		{
+			purple_blist_alias_contact(contact.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_alias_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_alias_buddy(PurpleBuddy * buddy, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_alias_buddy(IntPtr buddy, string alias);
+
+		public static void AliasBuddy(PurpleBuddy buddy, string alias)
+		{
+			purple_blist_alias_buddy(buddy.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_server_alias_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_server_alias_buddy(PurpleBuddy * buddy, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_server_alias_buddy(IntPtr buddy, string alias);
+
+		public static void ServerAliasBuddy(PurpleBuddy buddy, string alias)
+		{
+			purple_blist_server_alias_buddy(buddy.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_alias_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_alias_chat(PurpleChat * chat, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_alias_chat(IntPtr chat, string alias);
+
+		public static void AliasChat(PurpleChat chat, string alias)
+		{
+			purple_blist_alias_chat(chat.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_rename_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_rename_group(PurpleGroup * group, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_rename_group(IntPtr group, string name);
+
+		public static void RenameGroup(PurpleGroup group, string name)
+		{
+			purple_blist_rename_group(group.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_chat_new
+		 * Function Type: PurpleChat *
+		 * Function RawType: PurpleChat
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleChat * purple_chat_new(PurpleAccount * account, char * alias, GHashTable * components)
+		 * 
+		 * Could not generate a wrapper for purple_chat_new in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_chat_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_chat_destroy(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_chat_destroy(IntPtr chat);
+
+		public static void ChatDestroy(PurpleChat chat)
+		{
+			purple_chat_destroy(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_chat(PurpleChat * chat, PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_chat(IntPtr chat, IntPtr group, IntPtr node);
+
+		public static void AddChat(PurpleChat chat, PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_chat(chat.Reference, group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_new
+		 * Function Type: PurpleBuddy *
+		 * Function RawType: PurpleBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddy * purple_buddy_new(PurpleAccount * account, char * name, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_new(IntPtr account, string name, string alias);
+
+		public static PurpleBuddy BuddyNew(PurpleAccount account, string name, string alias)
+		{
+			return new PurpleBuddy(purple_buddy_new(account.Reference, name, alias));
+		}
+
+		/*
+		 * Function Name: purple_buddy_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_destroy(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_destroy(IntPtr buddy);
+
+		public static void BuddyDestroy(PurpleBuddy buddy)
+		{
+			purple_buddy_destroy(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_set_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_set_icon(PurpleBuddy * buddy, PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_set_icon(IntPtr buddy, IntPtr icon);
+
+		public static void BuddySetIcon(PurpleBuddy buddy, /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_buddy_get_account(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_account(IntPtr buddy);
+
+		public static PurpleAccount BuddyGetAccount(PurpleBuddy buddy)
+		{
+			return new PurpleAccount(purple_buddy_get_account(buddy.Reference));
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_name(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_name(IntPtr buddy);
+
+		public static string BuddyGetName(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_name(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_icon
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_get_icon(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_icon(IntPtr buddy);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyGetIcon(PurpleBuddy buddy)
+		{
+			/* Unable to process the return value of purple_buddy_get_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_protocol_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_buddy_get_protocol_data(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_protocol_data(IntPtr buddy);
+
+		public static IntPtr BuddyGetProtocolData(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_protocol_data(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_set_protocol_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_set_protocol_data(PurpleBuddy * buddy, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_set_protocol_data(IntPtr buddy, IntPtr data);
+
+		public static void BuddySetProtocolData(PurpleBuddy buddy, IntPtr data)
+		{
+			purple_buddy_set_protocol_data(buddy.Reference, data);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_contact
+		 * Function Type: PurpleContact *
+		 * Function RawType: PurpleContact
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleContact * purple_buddy_get_contact(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_contact(IntPtr buddy);
+
+		public static PurpleContact BuddyGetContact(PurpleBuddy buddy)
+		{
+			return new PurpleContact(purple_buddy_get_contact(buddy.Reference));
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_presence
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_buddy_get_presence(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_presence(IntPtr buddy);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr BuddyGetPresence(PurpleBuddy buddy)
+		{
+			/* Unable to process the return value of purple_buddy_get_presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_add_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_buddy(PurpleBuddy * buddy, PurpleContact * contact, PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_buddy(IntPtr buddy, IntPtr contact, IntPtr group, IntPtr node);
+
+		public static void AddBuddy(PurpleBuddy buddy, PurpleContact contact, PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_buddy(buddy.Reference, contact.Reference, group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_group_new
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_group_new(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_group_new(string name);
+
+		public static PurpleGroup GroupNew(string name)
+		{
+			return new PurpleGroup(purple_group_new(name));
+		}
+
+		/*
+		 * Function Name: purple_group_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_group_destroy(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_group_destroy(IntPtr group);
+
+		public static void GroupDestroy(PurpleGroup group)
+		{
+			purple_group_destroy(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_group(PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_group(IntPtr group, IntPtr node);
+
+		public static void AddGroup(PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_group(group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_new
+		 * Function Type: PurpleContact *
+		 * Function RawType: PurpleContact
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleContact * purple_contact_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_contact_new();
+
+		public static PurpleContact ContactNew()
+		{
+			return new PurpleContact(purple_contact_new());
+		}
+
+		/*
+		 * Function Name: purple_contact_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_contact_destroy(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_contact_destroy(IntPtr contact);
+
+		public static void ContactDestroy(PurpleContact contact)
+		{
+			purple_contact_destroy(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_contact(PurpleContact * contact, PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_contact(IntPtr contact, IntPtr group, IntPtr node);
+
+		public static void AddContact(PurpleContact contact, PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_contact(contact.Reference, group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_merge_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_merge_contact(PurpleContact * source, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_merge_contact(IntPtr source, IntPtr node);
+
+		public static void MergeContact(PurpleContact source, PurpleBlistNode node)
+		{
+			purple_blist_merge_contact(source.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_get_priority_buddy
+		 * Function Type: PurpleBuddy *
+		 * Function RawType: PurpleBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddy * purple_contact_get_priority_buddy(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_contact_get_priority_buddy(IntPtr contact);
+
+		public static PurpleBuddy ContactGetPriorityBuddy(PurpleContact contact)
+		{
+			return new PurpleBuddy(purple_contact_get_priority_buddy(contact.Reference));
+		}
+
+		/*
+		 * Function Name: purple_contact_set_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_contact_set_alias(PurpleContact * contact, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_contact_set_alias(IntPtr contact, string alias);
+
+		public static void ContactSetAlias(PurpleContact contact, string alias)
+		{
+			purple_contact_set_alias(contact.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_contact_get_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_contact_get_alias(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_contact_get_alias(IntPtr contact);
+
+		public static string ContactGetAlias(PurpleContact contact)
+		{
+			return purple_contact_get_alias(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_on_account
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_contact_on_account(PurpleContact * contact, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_contact_on_account(IntPtr contact, IntPtr account);
+
+		public static bool ContactOnAccount(PurpleContact contact, PurpleAccount account)
+		{
+			return purple_contact_on_account(contact.Reference, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_invalidate_priority_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_contact_invalidate_priority_buddy(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_contact_invalidate_priority_buddy(IntPtr contact);
+
+		public static void ContactInvalidatePriorityBuddy(PurpleContact contact)
+		{
+			purple_contact_invalidate_priority_buddy(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_buddy(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_buddy(IntPtr buddy);
+
+		public static void RemoveBuddy(PurpleBuddy buddy)
+		{
+			purple_blist_remove_buddy(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_contact(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_contact(IntPtr contact);
+
+		public static void RemoveContact(PurpleContact contact)
+		{
+			purple_blist_remove_contact(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_chat(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_chat(IntPtr chat);
+
+		public static void RemoveChat(PurpleChat chat)
+		{
+			purple_blist_remove_chat(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_group(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_group(IntPtr group);
+
+		public static void RemoveGroup(PurpleGroup group)
+		{
+			purple_blist_remove_group(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_alias_only
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_alias_only(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_alias_only(IntPtr buddy);
+
+		public static string BuddyGetAliasOnly(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_alias_only(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_server_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_server_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_server_alias(IntPtr buddy);
+
+		public static string BuddyGetServerAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_server_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_contact_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_contact_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_contact_alias(IntPtr buddy);
+
+		public static string BuddyGetContactAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_contact_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_local_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_local_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_local_alias(IntPtr buddy);
+
+		public static string BuddyGetLocalAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_local_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_alias(IntPtr buddy);
+
+		public static string BuddyGetAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_local_buddy_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_local_buddy_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_local_buddy_alias(IntPtr buddy);
+
+		public static string BuddyGetLocalBuddyAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_local_buddy_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_chat_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_chat_get_name(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_chat_get_name(IntPtr chat);
+
+		public static string ChatGetName(PurpleChat chat)
+		{
+			return purple_chat_get_name(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_find_buddy
+		 * Function Type: PurpleBuddy *
+		 * Function RawType: PurpleBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddy * purple_find_buddy(PurpleAccount * account, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_buddy(IntPtr account, string name);
+
+		public static PurpleBuddy FindBuddy(PurpleAccount account, string name)
+		{
+			return new PurpleBuddy(purple_find_buddy(account.Reference, name));
+		}
+
+		/*
+		 * Function Name: purple_find_buddies
+		 * Function Type: GSList *
+		 * Function RawType: GSList
+		 * Function Category: PointerToGSList
+		 */
+		/*
+		 * GSList * purple_find_buddies(PurpleAccount * account, char * name)
+		 * 
+		 * Could not generate a wrapper for purple_find_buddies in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_find_buddies
+		 */
+
+		/*
+		 * Function Name: purple_find_group
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_find_group(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_group(string name);
+
+		public static PurpleGroup FindGroup(string name)
+		{
+			return new PurpleGroup(purple_find_group(name));
+		}
+
+		/*
+		 * Function Name: purple_blist_find_chat
+		 * Function Type: PurpleChat *
+		 * Function RawType: PurpleChat
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleChat * purple_blist_find_chat(PurpleAccount * account, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_find_chat(IntPtr account, string name);
+
+		public static PurpleChat FindChat(PurpleAccount account, string name)
+		{
+			return new PurpleChat(purple_blist_find_chat(account.Reference, name));
+		}
+
+		/*
+		 * Function Name: purple_chat_get_group
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_chat_get_group(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_chat_get_group(IntPtr chat);
+
+		public static PurpleGroup ChatGetGroup(PurpleChat chat)
+		{
+			return new PurpleGroup(purple_chat_get_group(chat.Reference));
+		}
+
+		/*
+		 * Function Name: purple_chat_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_chat_get_account(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_chat_get_account(IntPtr chat);
+
+		public static PurpleAccount ChatGetAccount(PurpleChat chat)
+		{
+			return new PurpleAccount(purple_chat_get_account(chat.Reference));
+		}
+
+		/*
+		 * Function Name: purple_chat_get_components
+		 * Function Type: GHashTable *
+		 * Function RawType: GHashTable
+		 * Function Category: PointerToGHashTable
+		 */
+		/*
+		 * GHashTable * purple_chat_get_components(PurpleChat * chat)
+		 * 
+		 * Could not generate a wrapper for purple_chat_get_components in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_chat_get_components
+		 */
+
+		/*
+		 * Function Name: purple_buddy_get_group
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_buddy_get_group(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_group(IntPtr buddy);
+
+		public static PurpleGroup BuddyGetGroup(PurpleBuddy buddy)
+		{
+			return new PurpleGroup(purple_buddy_get_group(buddy.Reference));
+		}
+
+		/*
+		 * Function Name: purple_group_get_accounts
+		 * Function Type: GSList *
+		 * Function RawType: GSList
+		 * Function Category: PointerToGSList
+		 */
+		/*
+		 * GSList * purple_group_get_accounts(PurpleGroup * g)
+		 * 
+		 * Could not generate a wrapper for purple_group_get_accounts in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_group_get_accounts
+		 */
+
+		/*
+		 * Function Name: purple_group_on_account
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_group_on_account(PurpleGroup * g, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_group_on_account(IntPtr g, IntPtr account);
+
+		public static bool GroupOnAccount(PurpleGroup g, PurpleAccount account)
+		{
+			return purple_group_on_account(g.Reference, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_group_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_group_get_name(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_group_get_name(IntPtr group);
+
+		public static string GroupGetName(PurpleGroup group)
+		{
+			return purple_group_get_name(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_account(IntPtr account);
+
+		public static void AddAccount(PurpleAccount account)
+		{
+			purple_blist_add_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_account(IntPtr account);
+
+		public static void RemoveAccount(PurpleAccount account)
+		{
+			purple_blist_remove_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_get_group_size
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_blist_get_group_size(PurpleGroup * group, gboolean offline)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_blist_get_group_size(IntPtr group, bool offline);
+
+		public static int GetGroupSize(PurpleGroup group, bool offline)
+		{
+			return purple_blist_get_group_size(group.Reference, offline);
+		}
+
+		/*
+		 * Function Name: purple_blist_get_group_online_count
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_blist_get_group_online_count(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_blist_get_group_online_count(IntPtr group);
+
+		public static int GetGroupOnlineCount(PurpleGroup group)
+		{
+			return purple_blist_get_group_online_count(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_load
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_load()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_load();
+
+		public static void Load()
+		{
+			purple_blist_load();
+		}
+
+		/*
+		 * Function Name: purple_blist_schedule_save
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_schedule_save()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_schedule_save();
+
+		public static void ScheduleSave()
+		{
+			purple_blist_schedule_save();
+		}
+
+		/*
+		 * Function Name: purple_blist_request_add_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_request_add_group()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_request_add_group();
+
+		public static void RequestAddGroup()
+		{
+			purple_blist_request_add_group();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_bool
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_bool(PurpleBlistNode * node, char * key, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_bool(IntPtr node, string key, bool value);
+
+		public static void NodeSetBool(PurpleBlistNode node, string key, bool value)
+		{
+			purple_blist_node_set_bool(node.Reference, key, value);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_bool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_blist_node_get_bool(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_blist_node_get_bool(IntPtr node, string key);
+
+		public static bool NodeGetBool(PurpleBlistNode node, string key)
+		{
+			return purple_blist_node_get_bool(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_int(PurpleBlistNode * node, char * key, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_int(IntPtr node, string key, int value);
+
+		public static void NodeSetInt(PurpleBlistNode node, string key, int value)
+		{
+			purple_blist_node_set_int(node.Reference, key, value);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_blist_node_get_int(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_blist_node_get_int(IntPtr node, string key);
+
+		public static int NodeGetInt(PurpleBlistNode node, string key)
+		{
+			return purple_blist_node_get_int(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_string
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_blist_node_get_string(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_blist_node_get_string(IntPtr node, string key);
+
+		public static string NodeGetString(PurpleBlistNode node, string key)
+		{
+			return purple_blist_node_get_string(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_remove_setting
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_remove_setting(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_remove_setting(IntPtr node, string key);
+
+		public static void NodeRemoveSetting(PurpleBlistNode node, string key)
+		{
+			purple_blist_node_remove_setting(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_flags
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_flags(PurpleBlistNode * node, PurpleBlistNodeFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_flags(IntPtr node, Blist.PurpleBlistNodeFlags flags);
+
+		public static void NodeSetFlags(PurpleBlistNode node, Blist.PurpleBlistNodeFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_flags
+		 * Function Type: PurpleBlistNodeFlags
+		 * Function RawType: PurpleBlistNodeFlags
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleBlistNodeFlags purple_blist_node_get_flags(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Blist.PurpleBlistNodeFlags purple_blist_node_get_flags(IntPtr node);
+
+		public static Blist.PurpleBlistNodeFlags NodeGetFlags(PurpleBlistNode node)
+		{
+			/* Unable to process the return value of purple_blist_node_get_flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_type
+		 * Function Type: PurpleBlistNodeType
+		 * Function RawType: PurpleBlistNodeType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleBlistNodeType purple_blist_node_get_type(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Blist.PurpleBlistNodeType purple_blist_node_get_type(IntPtr node);
+
+		public static Blist.PurpleBlistNodeType NodeGetType(PurpleBlistNode node)
+		{
+			/* Unable to process the return value of purple_blist_node_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_extended_menu
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_blist_node_get_extended_menu(PurpleBlistNode * n)
+		 * 
+		 * Could not generate a wrapper for purple_blist_node_get_extended_menu in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_blist_node_get_extended_menu
+		 */
+
+		/*
+		 * Function Name: purple_blist_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_set_ui_ops(PurpleBlistUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleBlistUiOps ops)
+		{
+			purple_blist_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_get_ui_ops
+		 * Function Type: PurpleBlistUiOps *
+		 * Function RawType: PurpleBlistUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistUiOps * purple_blist_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_ui_ops();
+
+		public static PurpleBlistUiOps GetUiOps()
+		{
+			return new PurpleBlistUiOps(purple_blist_get_ui_ops());
+		}
+
+		/*
+		 * Function Name: purple_blist_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_blist_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_blist_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_blist_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_init();
+
+		public static void Init()
+		{
+			purple_blist_init();
+		}
+
+		/*
+		 * Function Name: purple_blist_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_uninit();
+
+		public static void Uninit()
+		{
+			purple_blist_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Buddyicon.cs	8cde02e2026db24e2de82e964541ac1be1e1fab7
+++ libpurple/wrapper/Buddyicon.cs	8cde02e2026db24e2de82e964541ac1be1e1fab7
@@ -0,0 +1,492 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: buddyicon.h
+	 */
+	public class Buddyicon
+	{
+
+		/*
+		 * Function Name: purple_buddy_icon_ref
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_icon_ref(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_ref(IntPtr icon);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyIconRef(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_unref
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_icon_unref(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_unref(IntPtr icon);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyIconUnref(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_update
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icon_update(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icon_update(IntPtr icon);
+
+		public static void BuddyIconUpdate(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_buddy_icon_get_account(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_get_account(IntPtr icon);
+
+		public static PurpleAccount BuddyIconGetAccount(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_username
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_username(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_username(IntPtr icon);
+
+		public static string BuddyIconGetUsername(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_checksum
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_checksum(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_checksum(IntPtr icon);
+
+		public static string BuddyIconGetChecksum(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_data
+		 * Function Type: gconstpointer
+		 * Function RawType: gconstpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gconstpointer purple_buddy_icon_get_data(PurpleBuddyIcon * icon, size_t * len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_get_data(IntPtr icon, IntPtr len);
+
+		public static IntPtr BuddyIconGetData(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon, /* Resolved as PointerToUnknownStruct to size_t */ IntPtr len)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			/* Unable to process len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_extension
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_extension(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_extension(IntPtr icon);
+
+		public static string BuddyIconGetExtension(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_full_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_full_path(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_full_path(IntPtr icon);
+
+		public static string BuddyIconGetFullPath(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_checksum_for_user
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icons_get_checksum_for_user(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icons_get_checksum_for_user(IntPtr buddy);
+
+		public static string BuddyIconsGetChecksumForUser(PurpleBuddy buddy)
+		{
+			return purple_buddy_icons_get_checksum_for_user(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_find
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_icons_find(PurpleAccount * account, char * username)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_find(IntPtr account, string username);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyIconsFind(PurpleAccount account, string username)
+		{
+			/* Unable to process the return value of purple_buddy_icons_find, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_find_account_icon
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_buddy_icons_find_account_icon(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_find_account_icon(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr BuddyIconsFindAccountIcon(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_buddy_icons_find_account_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_account_icon_timestamp
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_buddy_icons_get_account_icon_timestamp(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_buddy_icons_get_account_icon_timestamp(IntPtr account);
+
+		public static DateTime BuddyIconsGetAccountIconTimestamp(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_buddy_icons_get_account_icon_timestamp, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_node_has_custom_icon
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_buddy_icons_node_has_custom_icon(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_buddy_icons_node_has_custom_icon(IntPtr node);
+
+		public static bool BuddyIconsNodeHasCustomIcon(PurpleBlistNode node)
+		{
+			return purple_buddy_icons_node_has_custom_icon(node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_node_find_custom_icon
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_buddy_icons_node_find_custom_icon(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_node_find_custom_icon(IntPtr node);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr BuddyIconsNodeFindCustomIcon(PurpleBlistNode node)
+		{
+			/* Unable to process the return value of purple_buddy_icons_node_find_custom_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_has_custom_icon
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_buddy_icons_has_custom_icon(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_buddy_icons_has_custom_icon(IntPtr contact);
+
+		public static bool BuddyIconsHasCustomIcon(PurpleContact contact)
+		{
+			return purple_buddy_icons_has_custom_icon(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_find_custom_icon
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_buddy_icons_find_custom_icon(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_find_custom_icon(IntPtr contact);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr BuddyIconsFindCustomIcon(PurpleContact contact)
+		{
+			/* Unable to process the return value of purple_buddy_icons_find_custom_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_set_caching
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_set_caching(gboolean caching)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_set_caching(bool caching);
+
+		public static void BuddyIconsSetCaching(bool caching)
+		{
+			purple_buddy_icons_set_caching(caching);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_is_caching
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_buddy_icons_is_caching()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_buddy_icons_is_caching();
+
+		public static bool BuddyIconsIsCaching()
+		{
+			return purple_buddy_icons_is_caching();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_set_cache_dir
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_set_cache_dir(char * cache_dir)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_set_cache_dir(string cache_dir);
+
+		public static void BuddyIconsSetCacheDir(string cache_dir)
+		{
+			purple_buddy_icons_set_cache_dir(cache_dir);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_cache_dir
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icons_get_cache_dir()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icons_get_cache_dir();
+
+		public static string BuddyIconsGetCacheDir()
+		{
+			return purple_buddy_icons_get_cache_dir();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_buddy_icons_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_get_handle();
+
+		public static IntPtr BuddyIconsGetHandle()
+		{
+			return purple_buddy_icons_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_init();
+
+		public static void BuddyIconsInit()
+		{
+			purple_buddy_icons_init();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_uninit();
+
+		public static void BuddyIconsUninit()
+		{
+			purple_buddy_icons_uninit();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_scale_size
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icon_get_scale_size(PurpleBuddyIconSpec * spec, int * width, int * height)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icon_get_scale_size(IntPtr spec, IntPtr width, IntPtr height);
+
+		public static void BuddyIconGetScaleSize(PurpleBuddyIconSpec spec, /* Resolved as PointerToUnknownStruct to int */ IntPtr width, /* Resolved as PointerToUnknownStruct to int */ IntPtr height)
+		{
+			/* Unable to process width, a PointerToUnknownStruct. */
+			/* Unable to process height, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Certificate.cs	ba6b49b80f5f6ed7ce4bd89f3920f02cb1d92405
+++ libpurple/wrapper/Certificate.cs	ba6b49b80f5f6ed7ce4bd89f3920f02cb1d92405
@@ -0,0 +1,708 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 */
+	public class Certificate
+	{
+		public enum PurpleCertificateVerificationStatus
+		{
+			PURPLE_CERTIFICATE_INVALID = 0,
+			PURPLE_CERTIFICATE_VALID = 1
+		};
+
+		public delegate void PurpleCertificateVerifiedCallback(Certificate.PurpleCertificateVerificationStatus st, IntPtr userdata);
+
+		/*
+		 * Function Name: purple_certificate_copy
+		 * Function Type: PurpleCertificate *
+		 * Function RawType: PurpleCertificate
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificate * purple_certificate_copy(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_copy(IntPtr crt);
+
+		public static PurpleCertificate Copy(PurpleCertificate crt)
+		{
+			return new PurpleCertificate(purple_certificate_copy(crt.Reference));
+		}
+
+		/*
+		 * Function Name: purple_certificate_copy_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_copy_list(GList * crt_list)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_copy_list in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_copy_list
+		 */
+
+		/*
+		 * Function Name: purple_certificate_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_destroy(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_destroy(IntPtr crt);
+
+		public static void Destroy(PurpleCertificate crt)
+		{
+			purple_certificate_destroy(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_destroy_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_destroy_list(GList * crt_list)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_destroy_list in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_certificate_signed_by
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_signed_by(PurpleCertificate * crt, PurpleCertificate * issuer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_signed_by(IntPtr crt, IntPtr issuer);
+
+		public static bool SignedBy(PurpleCertificate crt, PurpleCertificate issuer)
+		{
+			return purple_certificate_signed_by(crt.Reference, issuer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_check_signature_chain
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_check_signature_chain(GList * chain)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_check_signature_chain in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_certificate_import
+		 * Function Type: PurpleCertificate *
+		 * Function RawType: PurpleCertificate
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificate * purple_certificate_import(PurpleCertificateScheme * scheme, gchar * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_import(IntPtr scheme, string filename);
+
+		public static PurpleCertificate Import(PurpleCertificateScheme scheme, string filename)
+		{
+			return new PurpleCertificate(purple_certificate_import(scheme.Reference, filename));
+		}
+
+		/*
+		 * Function Name: purple_certificate_export
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_export(gchar * filename, PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_export(string filename, IntPtr crt);
+
+		public static bool Export(string filename, PurpleCertificate crt)
+		{
+			return purple_certificate_export(filename, crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_fingerprint_sha1
+		 * Function Type: GByteArray *
+		 * Function RawType: GByteArray
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * GByteArray * purple_certificate_get_fingerprint_sha1(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_get_fingerprint_sha1(IntPtr crt);
+
+		public static /* Resolved as PointerToUnknownStruct to GByteArray */ IntPtr GetFingerprintSha1(PurpleCertificate crt)
+		{
+			/* Unable to process the return value of purple_certificate_get_fingerprint_sha1, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_unique_id
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_get_unique_id(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_get_unique_id(IntPtr crt);
+
+		public static string GetUniqueId(PurpleCertificate crt)
+		{
+			return purple_certificate_get_unique_id(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_issuer_unique_id
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_get_issuer_unique_id(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_get_issuer_unique_id(IntPtr crt);
+
+		public static string GetIssuerUniqueId(PurpleCertificate crt)
+		{
+			return purple_certificate_get_issuer_unique_id(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_subject_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_get_subject_name(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_get_subject_name(IntPtr crt);
+
+		public static string GetSubjectName(PurpleCertificate crt)
+		{
+			return purple_certificate_get_subject_name(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_check_subject_name
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_check_subject_name(PurpleCertificate * crt, gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_check_subject_name(IntPtr crt, string name);
+
+		public static bool CheckSubjectName(PurpleCertificate crt, string name)
+		{
+			return purple_certificate_check_subject_name(crt.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_times
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_get_times(PurpleCertificate * crt, time_t * activation, time_t * expiration)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_get_times(IntPtr crt, IntPtr activation, IntPtr expiration);
+
+		public static bool GetTimes(PurpleCertificate crt, /* Resolved as PointerToUnknownStruct to time_t */ IntPtr activation, /* Resolved as PointerToUnknownStruct to time_t */ IntPtr expiration)
+		{
+			/* Unable to process activation, a PointerToUnknownStruct. */
+			/* Unable to process expiration, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_mkpath
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_pool_mkpath(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_pool_mkpath(IntPtr pool, string id);
+
+		public static string PoolMkpath(PurpleCertificatePool pool, string id)
+		{
+			return purple_certificate_pool_mkpath(pool.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_usable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_usable(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_usable(IntPtr pool);
+
+		public static bool PoolUsable(PurpleCertificatePool pool)
+		{
+			return purple_certificate_pool_usable(pool.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_get_scheme
+		 * Function Type: PurpleCertificateScheme *
+		 * Function RawType: PurpleCertificateScheme
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificateScheme * purple_certificate_pool_get_scheme(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_pool_get_scheme(IntPtr pool);
+
+		public static PurpleCertificateScheme PoolGetScheme(PurpleCertificatePool pool)
+		{
+			return new PurpleCertificateScheme(purple_certificate_pool_get_scheme(pool.Reference));
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_contains
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_contains(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_contains(IntPtr pool, string id);
+
+		public static bool PoolContains(PurpleCertificatePool pool, string id)
+		{
+			return purple_certificate_pool_contains(pool.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_retrieve
+		 * Function Type: PurpleCertificate *
+		 * Function RawType: PurpleCertificate
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificate * purple_certificate_pool_retrieve(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_pool_retrieve(IntPtr pool, string id);
+
+		public static PurpleCertificate PoolRetrieve(PurpleCertificatePool pool, string id)
+		{
+			return new PurpleCertificate(purple_certificate_pool_retrieve(pool.Reference, id));
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_store
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_store(PurpleCertificatePool * pool, gchar * id, PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_store(IntPtr pool, string id, IntPtr crt);
+
+		public static bool PoolStore(PurpleCertificatePool pool, string id, PurpleCertificate crt)
+		{
+			return purple_certificate_pool_store(pool.Reference, id, crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_delete
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_delete(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_delete(IntPtr pool, string id);
+
+		public static bool PoolDelete(PurpleCertificatePool pool, string id)
+		{
+			return purple_certificate_pool_delete(pool.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_get_idlist
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_pool_get_idlist(PurpleCertificatePool * pool)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_pool_get_idlist in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_pool_get_idlist
+		 */
+
+		/*
+		 * Function Name: purple_certificate_pool_destroy_idlist
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_pool_destroy_idlist(GList * idlist)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_pool_destroy_idlist in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_certificate_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_init();
+
+		public static void Init()
+		{
+			purple_certificate_init();
+		}
+
+		/*
+		 * Function Name: purple_certificate_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_uninit();
+
+		public static void Uninit()
+		{
+			purple_certificate_uninit();
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_handle
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_certificate_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_certificate_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_certificate_find_scheme
+		 * Function Type: PurpleCertificateScheme *
+		 * Function RawType: PurpleCertificateScheme
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificateScheme * purple_certificate_find_scheme(gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_find_scheme(string name);
+
+		public static PurpleCertificateScheme FindScheme(string name)
+		{
+			return new PurpleCertificateScheme(purple_certificate_find_scheme(name));
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_schemes
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_get_schemes()
+		 * 
+		 * Could not generate a wrapper for purple_certificate_get_schemes in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_get_schemes
+		 */
+
+		/*
+		 * Function Name: purple_certificate_register_scheme
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_register_scheme(PurpleCertificateScheme * scheme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_register_scheme(IntPtr scheme);
+
+		public static bool RegisterScheme(PurpleCertificateScheme scheme)
+		{
+			return purple_certificate_register_scheme(scheme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_unregister_scheme
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_unregister_scheme(PurpleCertificateScheme * scheme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_unregister_scheme(IntPtr scheme);
+
+		public static bool UnregisterScheme(PurpleCertificateScheme scheme)
+		{
+			return purple_certificate_unregister_scheme(scheme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_find_verifier
+		 * Function Type: PurpleCertificateVerifier *
+		 * Function RawType: PurpleCertificateVerifier
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificateVerifier * purple_certificate_find_verifier(gchar * scheme_name, gchar * ver_name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_find_verifier(string scheme_name, string ver_name);
+
+		public static PurpleCertificateVerifier FindVerifier(string scheme_name, string ver_name)
+		{
+			return new PurpleCertificateVerifier(purple_certificate_find_verifier(scheme_name, ver_name));
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_verifiers
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_get_verifiers()
+		 * 
+		 * Could not generate a wrapper for purple_certificate_get_verifiers in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_get_verifiers
+		 */
+
+		/*
+		 * Function Name: purple_certificate_register_verifier
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_register_verifier(PurpleCertificateVerifier * vr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_register_verifier(IntPtr vr);
+
+		public static bool RegisterVerifier(PurpleCertificateVerifier vr)
+		{
+			return purple_certificate_register_verifier(vr.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_unregister_verifier
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_unregister_verifier(PurpleCertificateVerifier * vr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_unregister_verifier(IntPtr vr);
+
+		public static bool UnregisterVerifier(PurpleCertificateVerifier vr)
+		{
+			return purple_certificate_unregister_verifier(vr.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_find_pool
+		 * Function Type: PurpleCertificatePool *
+		 * Function RawType: PurpleCertificatePool
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificatePool * purple_certificate_find_pool(gchar * scheme_name, gchar * pool_name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_find_pool(string scheme_name, string pool_name);
+
+		public static PurpleCertificatePool FindPool(string scheme_name, string pool_name)
+		{
+			return new PurpleCertificatePool(purple_certificate_find_pool(scheme_name, pool_name));
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_pools
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_get_pools()
+		 * 
+		 * Could not generate a wrapper for purple_certificate_get_pools in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_get_pools
+		 */
+
+		/*
+		 * Function Name: purple_certificate_register_pool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_register_pool(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_register_pool(IntPtr pool);
+
+		public static bool RegisterPool(PurpleCertificatePool pool)
+		{
+			return purple_certificate_register_pool(pool.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_unregister_pool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_unregister_pool(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_unregister_pool(IntPtr pool);
+
+		public static bool UnregisterPool(PurpleCertificatePool pool)
+		{
+			return purple_certificate_unregister_pool(pool.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_display_x509
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_display_x509(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_display_x509(IntPtr crt);
+
+		public static void DisplayX509(PurpleCertificate crt)
+		{
+			purple_certificate_display_x509(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_add_ca_search_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_add_ca_search_path(char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_add_ca_search_path(string path);
+
+		public static void AddCaSearchPath(string path)
+		{
+			purple_certificate_add_ca_search_path(path);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Cipher.cs	4edc904a0224254c28500cfce282318811809e1b
+++ libpurple/wrapper/Cipher.cs	4edc904a0224254c28500cfce282318811809e1b
@@ -0,0 +1,563 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: cipher.h
+	 */
+	public class Cipher
+	{
+		public enum PurpleCipherBatchMode
+		{
+			PURPLE_CIPHER_BATCH_MODE_ECB,
+			PURPLE_CIPHER_BATCH_MODE_CBC
+		};
+
+		public enum PurpleCipherCaps
+		{
+			PURPLE_CIPHER_CAPS_SET_OPT = 1 << 1,
+			PURPLE_CIPHER_CAPS_GET_OPT = 1 << 2,
+			PURPLE_CIPHER_CAPS_INIT = 1 << 3,
+			PURPLE_CIPHER_CAPS_RESET = 1 << 4,
+			PURPLE_CIPHER_CAPS_UNINIT = 1 << 5,
+			PURPLE_CIPHER_CAPS_SET_IV = 1 << 6,
+			PURPLE_CIPHER_CAPS_APPEND = 1 << 7,
+			PURPLE_CIPHER_CAPS_DIGEST = 1 << 8,
+			PURPLE_CIPHER_CAPS_ENCRYPT = 1 << 9,
+			PURPLE_CIPHER_CAPS_DECRYPT = 1 << 10,
+			PURPLE_CIPHER_CAPS_SET_SALT = 1 << 11,
+			PURPLE_CIPHER_CAPS_GET_SALT_SIZE = 1 << 12,
+			PURPLE_CIPHER_CAPS_SET_KEY = 1 << 13,
+			PURPLE_CIPHER_CAPS_GET_KEY_SIZE = 1 << 14,
+			PURPLE_CIPHER_CAPS_SET_BATCH_MODE = 1 << 15,
+			PURPLE_CIPHER_CAPS_GET_BATCH_MODE = 1 << 16,
+			PURPLE_CIPHER_CAPS_GET_BLOCK_SIZE = 1 << 17,
+			PURPLE_CIPHER_CAPS_SET_KEY_WITH_LEN = 1 << 18,
+			PURPLE_CIPHER_CAPS_UNKNOWN = 1 << 19
+		};
+
+
+		/*
+		 * Function Name: purple_cipher_get_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_cipher_get_name(PurpleCipher * cipher)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_cipher_get_name(IntPtr cipher);
+
+		public static string GetName(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_get_capabilities
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_cipher_get_capabilities(PurpleCipher * cipher)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_cipher_get_capabilities(IntPtr cipher);
+
+		public static uint GetCapabilities(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_find_cipher
+		 * Function Type: PurpleCipher *
+		 * Function RawType: PurpleCipher
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipher * purple_ciphers_find_cipher(gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ciphers_find_cipher(string name);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr CiphersFindCipher(string name)
+		{
+			/* Unable to process the return value of purple_ciphers_find_cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_register_cipher
+		 * Function Type: PurpleCipher *
+		 * Function RawType: PurpleCipher
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipher * purple_ciphers_register_cipher(gchar * name, PurpleCipherOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ciphers_register_cipher(string name, IntPtr ops);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr CiphersRegisterCipher(string name, PurpleCipherOps ops)
+		{
+			/* Unable to process the return value of purple_ciphers_register_cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_unregister_cipher
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_ciphers_unregister_cipher(PurpleCipher * cipher)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_ciphers_unregister_cipher(IntPtr cipher);
+
+		public static bool CiphersUnregisterCipher(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_get_ciphers
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_ciphers_get_ciphers()
+		 * 
+		 * Could not generate a wrapper for purple_ciphers_get_ciphers in file "cipher.h".
+		 * Message: Unknown inner-type of argument 0 of purple_ciphers_get_ciphers
+		 */
+
+		/*
+		 * Function Name: purple_ciphers_get_handle
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_ciphers_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ciphers_get_handle();
+
+		public static IntPtr CiphersGetHandle()
+		{
+			return purple_ciphers_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ciphers_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ciphers_init();
+
+		public static void CiphersInit()
+		{
+			purple_ciphers_init();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ciphers_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ciphers_uninit();
+
+		public static void CiphersUninit()
+		{
+			purple_ciphers_uninit();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_option
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_option(PurpleCipherContext * context, gchar * name, gpointer value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_option(IntPtr context, string name, IntPtr value);
+
+		public static void ContextSetOption(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, string name, IntPtr value)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_option
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_cipher_context_get_option(PurpleCipherContext * context, gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_get_option(IntPtr context, string name);
+
+		public static IntPtr ContextGetOption(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, string name)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_new
+		 * Function Type: PurpleCipherContext *
+		 * Function RawType: PurpleCipherContext
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipherContext * purple_cipher_context_new(PurpleCipher * cipher, void * extra)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_new(IntPtr cipher, IntPtr extra);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr ContextNew(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher, IntPtr extra)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_new_by_name
+		 * Function Type: PurpleCipherContext *
+		 * Function RawType: PurpleCipherContext
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipherContext * purple_cipher_context_new_by_name(gchar * name, void * extra)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_new_by_name(string name, IntPtr extra);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr ContextNewByName(string name, IntPtr extra)
+		{
+			/* Unable to process the return value of purple_cipher_context_new_by_name, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_reset
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_reset(PurpleCipherContext * context, gpointer extra)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_reset(IntPtr context, IntPtr extra);
+
+		public static void ContextReset(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, IntPtr extra)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_destroy(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_destroy(IntPtr context);
+
+		public static void ContextDestroy(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_iv
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_iv(PurpleCipherContext * context, guchar * iv, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_iv(IntPtr context, IntPtr iv, ulong len);
+
+		public static void ContextSetIv(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr iv, ulong len)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process iv, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_append
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_append(PurpleCipherContext * context, guchar * data, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_append(IntPtr context, IntPtr data, ulong len);
+
+		public static void ContextAppend(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr data, ulong len)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_salt
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_salt(PurpleCipherContext * context, guchar * salt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_salt(IntPtr context, IntPtr salt);
+
+		public static void ContextSetSalt(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr salt)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process salt, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_salt_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_cipher_context_get_salt_size(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_cipher_context_get_salt_size(IntPtr context);
+
+		public static ulong ContextGetSaltSize(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_key
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_key(PurpleCipherContext * context, guchar * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_key(IntPtr context, IntPtr key);
+
+		public static void ContextSetKey(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr key)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process key, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_key_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_cipher_context_get_key_size(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_cipher_context_get_key_size(IntPtr context);
+
+		public static ulong ContextGetKeySize(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_batch_mode
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_batch_mode(PurpleCipherContext * context, PurpleCipherBatchMode mode)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_batch_mode(IntPtr context, Cipher.PurpleCipherBatchMode mode);
+
+		public static void ContextSetBatchMode(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, Cipher.PurpleCipherBatchMode mode)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process mode, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_batch_mode
+		 * Function Type: PurpleCipherBatchMode
+		 * Function RawType: PurpleCipherBatchMode
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleCipherBatchMode purple_cipher_context_get_batch_mode(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Cipher.PurpleCipherBatchMode purple_cipher_context_get_batch_mode(IntPtr context);
+
+		public static Cipher.PurpleCipherBatchMode ContextGetBatchMode(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_block_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_cipher_context_get_block_size(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_cipher_context_get_block_size(IntPtr context);
+
+		public static ulong ContextGetBlockSize(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_key_with_len
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_key_with_len(PurpleCipherContext * context, guchar * key, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_key_with_len(IntPtr context, IntPtr key, ulong len);
+
+		public static void ContextSetKeyWithLen(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr key, ulong len)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process key, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_data(PurpleCipherContext * context, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_data(IntPtr context, IntPtr data);
+
+		public static void ContextSetData(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, IntPtr data)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_cipher_context_get_data(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_get_data(IntPtr context);
+
+		public static IntPtr ContextGetData(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Circbuffer.cs	24520387f519397679c2e7e44b5fa8c948f340b4
+++ libpurple/wrapper/Circbuffer.cs	24520387f519397679c2e7e44b5fa8c948f340b4
@@ -0,0 +1,135 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: circbuffer.h
+	 */
+	public class Circbuffer
+	{
+
+		/*
+		 * Function Name: purple_circ_buffer_new
+		 * Function Type: PurpleCircBuffer *
+		 * Function RawType: PurpleCircBuffer
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCircBuffer * purple_circ_buffer_new(gsize growsize)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_circ_buffer_new(ulong growsize);
+
+		public static PurpleCircBuffer CircBufferNew(ulong growsize)
+		{
+			return new PurpleCircBuffer(purple_circ_buffer_new(growsize));
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_circ_buffer_destroy(PurpleCircBuffer * buf)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_circ_buffer_destroy(IntPtr buf);
+
+		public static void CircBufferDestroy(PurpleCircBuffer buf)
+		{
+			purple_circ_buffer_destroy(buf.Reference);
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_append
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_circ_buffer_append(PurpleCircBuffer * buf, gconstpointer src, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_circ_buffer_append(IntPtr buf, IntPtr src, ulong len);
+
+		public static void CircBufferAppend(PurpleCircBuffer buf, IntPtr src, ulong len)
+		{
+			purple_circ_buffer_append(buf.Reference, src, len);
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_get_max_read
+		 * Function Type: gsize
+		 * Function RawType: gsize
+		 * Function Category: Native
+		 */
+		/*
+		 * gsize purple_circ_buffer_get_max_read(PurpleCircBuffer * buf)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_circ_buffer_get_max_read(IntPtr buf);
+
+		public static ulong CircBufferGetMaxRead(PurpleCircBuffer buf)
+		{
+			return purple_circ_buffer_get_max_read(buf.Reference);
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_mark_read
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_circ_buffer_mark_read(PurpleCircBuffer * buf, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_circ_buffer_mark_read(IntPtr buf, ulong len);
+
+		public static bool CircBufferMarkRead(PurpleCircBuffer buf, ulong len)
+		{
+			return purple_circ_buffer_mark_read(buf.Reference, len);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Cmds.cs	23568b8957912fd945161ee2d6c60f959e19e1cf
+++ libpurple/wrapper/Cmds.cs	23568b8957912fd945161ee2d6c60f959e19e1cf
@@ -0,0 +1,182 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: cmds.h
+	 */
+	public class Cmds
+	{
+		public enum PurpleCmdStatus
+		{
+			PURPLE_CMD_STATUS_OK,
+			PURPLE_CMD_STATUS_FAILED,
+			PURPLE_CMD_STATUS_NOT_FOUND,
+			PURPLE_CMD_STATUS_WRONG_ARGS,
+			PURPLE_CMD_STATUS_WRONG_PRPL,
+			PURPLE_CMD_STATUS_WRONG_TYPE
+		};
+
+		public enum PurpleCmdRet
+		{
+			PURPLE_CMD_RET_OK,
+			PURPLE_CMD_RET_FAILED,
+			PURPLE_CMD_RET_CONTINUE
+		};
+
+		public enum PurpleCmdPriority
+		{
+			PURPLE_CMD_P_VERY_LOW = -1000,
+			PURPLE_CMD_P_LOW = 0,
+			PURPLE_CMD_P_DEFAULT = 1000,
+			PURPLE_CMD_P_PRPL = 2000,
+			PURPLE_CMD_P_PLUGIN = 3000,
+			PURPLE_CMD_P_ALIAS = 4000,
+			PURPLE_CMD_P_HIGH = 5000,
+			PURPLE_CMD_P_VERY_HIGH = 6000
+		};
+
+		public enum PurpleCmdFlag
+		{
+			PURPLE_CMD_FLAG_IM = 0x01,
+			PURPLE_CMD_FLAG_CHAT = 0x02,
+			PURPLE_CMD_FLAG_PRPL_ONLY = 0x04,
+			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS = 0x08
+		};
+
+		public delegate Cmds.PurpleCmdRet PurpleCmdFunc(IntPtr _PurpleWrapper_arg0, string cmd, IntPtr args, IntPtr error, IntPtr data);
+
+		/*
+		 * Function Name: purple_cmd_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cmd_unregister(PurpleCmdId id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cmd_unregister(uint id);
+
+		public static void CmdUnregister(uint id)
+		{
+			purple_cmd_unregister(id);
+		}
+
+		/*
+		 * Function Name: purple_cmd_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_cmd_list(PurpleConversation * conv)
+		 * 
+		 * Could not generate a wrapper for purple_cmd_list in file "cmds.h".
+		 * Message: Unknown inner-type of argument 0 of purple_cmd_list
+		 */
+
+		/*
+		 * Function Name: purple_cmd_help
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_cmd_help(PurpleConversation * conv, gchar * cmd)
+		 * 
+		 * Could not generate a wrapper for purple_cmd_help in file "cmds.h".
+		 * Message: Unknown inner-type of argument 0 of purple_cmd_help
+		 */
+
+		/*
+		 * Function Name: purple_cmds_get_handle
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_cmds_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cmds_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_cmds_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_cmds_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cmds_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cmds_init();
+
+		public static void Init()
+		{
+			purple_cmds_init();
+		}
+
+		/*
+		 * Function Name: purple_cmds_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cmds_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cmds_uninit();
+
+		public static void Uninit()
+		{
+			purple_cmds_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Config.cs	8893673e392007a9ad1a26051bd945bcee99a762
+++ libpurple/wrapper/Config.cs	8893673e392007a9ad1a26051bd945bcee99a762
@@ -0,0 +1,67 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: config.h
+	 */
+	public class Config
+	{
+
+		/*
+		 * Function Name: static_proto_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void static_proto_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void static_proto_init();
+
+		public static void StaticProtoInit()
+		{
+			static_proto_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Connection.cs	fb8a70f60960e2109fa299cb5bfa94706222f514
+++ libpurple/wrapper/Connection.cs	fb8a70f60960e2109fa299cb5bfa94706222f514
@@ -0,0 +1,480 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: connection.h
+	 */
+	public class Connection
+	{
+		public enum PurpleConnectionFlags
+		{
+			PURPLE_CONNECTION_HTML = 0x0001,
+			PURPLE_CONNECTION_NO_BGCOLOR = 0x0002,
+			PURPLE_CONNECTION_AUTO_RESP = 0x0004,
+			PURPLE_CONNECTION_FORMATTING_WBFO = 0x0008,
+			PURPLE_CONNECTION_NO_NEWLINES = 0x0010,
+			PURPLE_CONNECTION_NO_FONTSIZE = 0x0020,
+			PURPLE_CONNECTION_NO_URLDESC = 0x0040,
+			PURPLE_CONNECTION_NO_IMAGES = 0x0080,
+			PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100
+		};
+
+		public enum PurpleConnectionState
+		{
+			PURPLE_DISCONNECTED = 0,
+			PURPLE_CONNECTED,
+			PURPLE_CONNECTING
+		};
+
+		public enum PurpleConnectionError
+		{
+			PURPLE_CONNECTION_ERROR_NETWORK_ERROR = 0,
+			PURPLE_CONNECTION_ERROR_INVALID_USERNAME = 1,
+			PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED = 2,
+			PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE = 3,
+			PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT = 4,
+			PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR = 5,
+			PURPLE_CONNECTION_ERROR_NAME_IN_USE = 6,
+			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS = 7,
+			PURPLE_CONNECTION_ERROR_CERT_NOT_PROVIDED = 8,
+			PURPLE_CONNECTION_ERROR_CERT_UNTRUSTED = 9,
+			PURPLE_CONNECTION_ERROR_CERT_EXPIRED = 10,
+			PURPLE_CONNECTION_ERROR_CERT_NOT_ACTIVATED = 11,
+			PURPLE_CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH = 12,
+			PURPLE_CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH = 13,
+			PURPLE_CONNECTION_ERROR_CERT_SELF_SIGNED = 14,
+			PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR = 15,
+			PURPLE_CONNECTION_ERROR_OTHER_ERROR = 16
+		};
+
+
+		/*
+		 * Function Name: purple_connection_new_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_new_unregister(PurpleAccount * account, char * password, PurpleAccountUnregistrationCb cb, void * user_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_new_unregister(IntPtr account, string password, IntPtr cb, IntPtr user_data);
+
+		public static void NewUnregister(PurpleAccount account, string password, Account.PurpleAccountUnregistrationCb cb, IntPtr user_data)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connection_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_destroy(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_destroy(IntPtr gc);
+
+		public static void Destroy(PurpleConnection gc)
+		{
+			purple_connection_destroy(gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_set_state
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_state(PurpleConnection * gc, PurpleConnectionState state)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_state(IntPtr gc, Connection.PurpleConnectionState state);
+
+		public static void SetState(PurpleConnection gc, Connection.PurpleConnectionState state)
+		{
+			/* Unable to process state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connection_set_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_account(PurpleConnection * gc, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_account(IntPtr gc, IntPtr account);
+
+		public static void SetAccount(PurpleConnection gc, PurpleAccount account)
+		{
+			purple_connection_set_account(gc.Reference, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_set_display_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_display_name(PurpleConnection * gc, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_display_name(IntPtr gc, string name);
+
+		public static void SetDisplayName(PurpleConnection gc, string name)
+		{
+			purple_connection_set_display_name(gc.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_connection_set_protocol_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_protocol_data(PurpleConnection * connection, void * proto_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_protocol_data(IntPtr connection, IntPtr proto_data);
+
+		public static void SetProtocolData(PurpleConnection connection, IntPtr proto_data)
+		{
+			purple_connection_set_protocol_data(connection.Reference, proto_data);
+		}
+
+		/*
+		 * Function Name: purple_connection_get_state
+		 * Function Type: PurpleConnectionState
+		 * Function RawType: PurpleConnectionState
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleConnectionState purple_connection_get_state(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Connection.PurpleConnectionState purple_connection_get_state(IntPtr gc);
+
+		public static Connection.PurpleConnectionState GetState(PurpleConnection gc)
+		{
+			/* Unable to process the return value of purple_connection_get_state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connection_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_connection_get_account(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connection_get_account(IntPtr gc);
+
+		public static PurpleAccount GetAccount(PurpleConnection gc)
+		{
+			return new PurpleAccount(purple_connection_get_account(gc.Reference));
+		}
+
+		/*
+		 * Function Name: purple_connection_get_prpl
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_connection_get_prpl(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connection_get_prpl(IntPtr gc);
+
+		public static PurplePlugin GetPrpl(PurpleConnection gc)
+		{
+			return new PurplePlugin(purple_connection_get_prpl(gc.Reference));
+		}
+
+		/*
+		 * Function Name: purple_connection_get_password
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_connection_get_password(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_connection_get_password(IntPtr gc);
+
+		public static string GetPassword(PurpleConnection gc)
+		{
+			return purple_connection_get_password(gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_get_display_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_connection_get_display_name(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_connection_get_display_name(IntPtr gc);
+
+		public static string GetDisplayName(PurpleConnection gc)
+		{
+			return purple_connection_get_display_name(gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_get_protocol_data
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_connection_get_protocol_data(PurpleConnection * connection)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connection_get_protocol_data(IntPtr connection);
+
+		public static IntPtr GetProtocolData(PurpleConnection connection)
+		{
+			return purple_connection_get_protocol_data(connection.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_notice
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_notice(PurpleConnection * gc, char * text)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_notice(IntPtr gc, string text);
+
+		public static void Notice(PurpleConnection gc, string text)
+		{
+			purple_connection_notice(gc.Reference, text);
+		}
+
+		/*
+		 * Function Name: purple_connection_error
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_error(PurpleConnection * gc, char * reason)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_error(IntPtr gc, string reason);
+
+		public static void Error(PurpleConnection gc, string reason)
+		{
+			purple_connection_error(gc.Reference, reason);
+		}
+
+		/*
+		 * Function Name: purple_connection_error_is_fatal
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_connection_error_is_fatal(PurpleConnectionError reason)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_connection_error_is_fatal(Connection.PurpleConnectionError reason);
+
+		public static bool ErrorIsFatal(Connection.PurpleConnectionError reason)
+		{
+			/* Unable to process reason, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connections_disconnect_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_disconnect_all()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_disconnect_all();
+
+		public static void ConnectionsDisconnectAll()
+		{
+			purple_connections_disconnect_all();
+		}
+
+		/*
+		 * Function Name: purple_connections_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_connections_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_connections_get_all in file "connection.h".
+		 * Message: Unknown inner-type of argument 0 of purple_connections_get_all
+		 */
+
+		/*
+		 * Function Name: purple_connections_get_connecting
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_connections_get_connecting()
+		 * 
+		 * Could not generate a wrapper for purple_connections_get_connecting in file "connection.h".
+		 * Message: Unknown inner-type of argument 0 of purple_connections_get_connecting
+		 */
+
+		/*
+		 * Function Name: purple_connections_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_set_ui_ops(PurpleConnectionUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_set_ui_ops(IntPtr ops);
+
+		public static void ConnectionsSetUiOps(/* Resolved as PointerToUnknownStruct to PurpleConnectionUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connections_get_ui_ops
+		 * Function Type: PurpleConnectionUiOps *
+		 * Function RawType: PurpleConnectionUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleConnectionUiOps * purple_connections_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connections_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleConnectionUiOps */ IntPtr ConnectionsGetUiOps()
+		{
+			/* Unable to process the return value of purple_connections_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connections_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_init();
+
+		public static void ConnectionsInit()
+		{
+			purple_connections_init();
+		}
+
+		/*
+		 * Function Name: purple_connections_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_uninit();
+
+		public static void ConnectionsUninit()
+		{
+			purple_connections_uninit();
+		}
+
+		/*
+		 * Function Name: purple_connections_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_connections_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connections_get_handle();
+
+		public static IntPtr ConnectionsGetHandle()
+		{
+			return purple_connections_get_handle();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Conversation.cs	ed841c0da93eb1f87303763312dd7689ddd58ce5
+++ libpurple/wrapper/Conversation.cs	ed841c0da93eb1f87303763312dd7689ddd58ce5
@@ -0,0 +1,1365 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 */
+	public class Conversation
+	{
+		public enum PurpleConversationType
+		{
+			PURPLE_CONV_TYPE_UNKNOWN = 0,
+			PURPLE_CONV_TYPE_IM,
+			PURPLE_CONV_TYPE_CHAT,
+			PURPLE_CONV_TYPE_MISC,
+			PURPLE_CONV_TYPE_ANY
+		};
+
+		public enum PurpleConvUpdateType
+		{
+			PURPLE_CONV_UPDATE_ADD = 0,
+			PURPLE_CONV_UPDATE_REMOVE,
+			PURPLE_CONV_UPDATE_ACCOUNT,
+			PURPLE_CONV_UPDATE_TYPING,
+			PURPLE_CONV_UPDATE_UNSEEN,
+			PURPLE_CONV_UPDATE_LOGGING,
+			PURPLE_CONV_UPDATE_TOPIC,
+			PURPLE_CONV_ACCOUNT_ONLINE,
+			PURPLE_CONV_ACCOUNT_OFFLINE,
+			PURPLE_CONV_UPDATE_AWAY,
+			PURPLE_CONV_UPDATE_ICON,
+			PURPLE_CONV_UPDATE_TITLE,
+			PURPLE_CONV_UPDATE_CHATLEFT,
+			PURPLE_CONV_UPDATE_FEATURES
+		};
+
+		public enum PurpleTypingState
+		{
+			PURPLE_NOT_TYPING = 0,
+			PURPLE_TYPING,
+			PURPLE_TYPED
+		};
+
+		public enum PurpleMessageFlags
+		{
+			PURPLE_MESSAGE_SEND = 0x0001,
+			PURPLE_MESSAGE_RECV = 0x0002,
+			PURPLE_MESSAGE_SYSTEM = 0x0004,
+			PURPLE_MESSAGE_AUTO_RESP = 0x0008,
+			PURPLE_MESSAGE_ACTIVE_ONLY = 0x0010,
+			PURPLE_MESSAGE_NICK = 0x0020,
+			PURPLE_MESSAGE_NO_LOG = 0x0040,
+			PURPLE_MESSAGE_WHISPER = 0x0080,
+			PURPLE_MESSAGE_ERROR = 0x0200,
+			PURPLE_MESSAGE_DELAYED = 0x0400,
+			PURPLE_MESSAGE_RAW = 0x0800,
+			PURPLE_MESSAGE_IMAGES = 0x1000,
+			PURPLE_MESSAGE_NOTIFY = 0x2000,
+			PURPLE_MESSAGE_NO_LINKIFY = 0x4000,
+			PURPLE_MESSAGE_INVISIBLE = 0x8000
+		};
+
+		public enum PurpleConvChatBuddyFlags
+		{
+			PURPLE_CBFLAGS_NONE = 0x0000,
+			PURPLE_CBFLAGS_VOICE = 0x0001,
+			PURPLE_CBFLAGS_HALFOP = 0x0002,
+			PURPLE_CBFLAGS_OP = 0x0004,
+			PURPLE_CBFLAGS_FOUNDER = 0x0008,
+			PURPLE_CBFLAGS_TYPING = 0x0010
+		};
+
+
+		/*
+		 * Function Name: purple_conversation_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_destroy(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_destroy(IntPtr conv);
+
+		public static void Destroy(PurpleConversation conv)
+		{
+			purple_conversation_destroy(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_present
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_present(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_present(IntPtr conv);
+
+		public static void Present(PurpleConversation conv)
+		{
+			purple_conversation_present(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_type
+		 * Function Type: PurpleConversationType
+		 * Function RawType: PurpleConversationType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleConversationType purple_conversation_get_type(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Conversation.PurpleConversationType purple_conversation_get_type(IntPtr conv);
+
+		public static Conversation.PurpleConversationType GetType(PurpleConversation conv)
+		{
+			/* Unable to process the return value of purple_conversation_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversations_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversations_set_ui_ops(PurpleConversationUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversations_set_ui_ops(IntPtr ops);
+
+		public static void ConversationsSetUiOps(PurpleConversationUiOps ops)
+		{
+			purple_conversations_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_conversation_get_account(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_account(IntPtr conv);
+
+		public static PurpleAccount GetAccount(PurpleConversation conv)
+		{
+			return new PurpleAccount(purple_conversation_get_account(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_gc
+		 * Function Type: PurpleConnection *
+		 * Function RawType: PurpleConnection
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConnection * purple_conversation_get_gc(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_gc(IntPtr conv);
+
+		public static PurpleConnection GetGc(PurpleConversation conv)
+		{
+			return new PurpleConnection(purple_conversation_get_gc(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_set_title
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_set_title(PurpleConversation * conv, char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_set_title(IntPtr conv, string title);
+
+		public static void SetTitle(PurpleConversation conv, string title)
+		{
+			purple_conversation_set_title(conv.Reference, title);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_title
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_get_title(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_get_title(IntPtr conv);
+
+		public static string GetTitle(PurpleConversation conv)
+		{
+			return purple_conversation_get_title(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_autoset_title
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_autoset_title(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_autoset_title(IntPtr conv);
+
+		public static void AutosetTitle(PurpleConversation conv)
+		{
+			purple_conversation_autoset_title(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_set_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_set_name(PurpleConversation * conv, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_set_name(IntPtr conv, string name);
+
+		public static void SetName(PurpleConversation conv, string name)
+		{
+			purple_conversation_set_name(conv.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_get_name(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_get_name(IntPtr conv);
+
+		public static string GetName(PurpleConversation conv)
+		{
+			return purple_conversation_get_name(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_set_logging
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_set_logging(PurpleConversation * conv, gboolean log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_set_logging(IntPtr conv, bool log);
+
+		public static void SetLogging(PurpleConversation conv, bool log)
+		{
+			purple_conversation_set_logging(conv.Reference, log);
+		}
+
+		/*
+		 * Function Name: purple_conversation_is_logging
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conversation_is_logging(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conversation_is_logging(IntPtr conv);
+
+		public static bool IsLogging(PurpleConversation conv)
+		{
+			return purple_conversation_is_logging(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_close_logs
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_close_logs(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_close_logs(IntPtr conv);
+
+		public static void CloseLogs(PurpleConversation conv)
+		{
+			purple_conversation_close_logs(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_im_data
+		 * Function Type: PurpleConvIm *
+		 * Function RawType: PurpleConvIm
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConvIm * purple_conversation_get_im_data(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_im_data(IntPtr conv);
+
+		public static PurpleConvIm GetImData(PurpleConversation conv)
+		{
+			return new PurpleConvIm(purple_conversation_get_im_data(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_chat_data
+		 * Function Type: PurpleConvChat *
+		 * Function RawType: PurpleConvChat
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConvChat * purple_conversation_get_chat_data(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_chat_data(IntPtr conv);
+
+		public static PurpleConvChat GetChatData(PurpleConversation conv)
+		{
+			return new PurpleConvChat(purple_conversation_get_chat_data(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_conversation_get_data(PurpleConversation * conv, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_data(IntPtr conv, string key);
+
+		public static IntPtr GetData(PurpleConversation conv, string key)
+		{
+			return purple_conversation_get_data(conv.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_get_conversations
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_get_conversations()
+		 * 
+		 * Could not generate a wrapper for purple_get_conversations in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_get_conversations
+		 */
+
+		/*
+		 * Function Name: purple_get_ims
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_get_ims()
+		 * 
+		 * Could not generate a wrapper for purple_get_ims in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_get_ims
+		 */
+
+		/*
+		 * Function Name: purple_get_chats
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_get_chats()
+		 * 
+		 * Could not generate a wrapper for purple_get_chats in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_get_chats
+		 */
+
+		/*
+		 * Function Name: purple_conversation_get_features
+		 * Function Type: PurpleConnectionFlags
+		 * Function RawType: PurpleConnectionFlags
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleConnectionFlags purple_conversation_get_features(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Connection.PurpleConnectionFlags purple_conversation_get_features(IntPtr conv);
+
+		public static Connection.PurpleConnectionFlags GetFeatures(PurpleConversation conv)
+		{
+			/* Unable to process the return value of purple_conversation_get_features, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversation_has_focus
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conversation_has_focus(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conversation_has_focus(IntPtr conv);
+
+		public static bool HasFocus(PurpleConversation conv)
+		{
+			return purple_conversation_has_focus(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_update
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_update(PurpleConversation * conv, PurpleConvUpdateType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_update(IntPtr conv, Conversation.PurpleConvUpdateType type);
+
+		public static void Update(PurpleConversation conv, Conversation.PurpleConvUpdateType type)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_message_history
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conversation_get_message_history(PurpleConversation * conv)
+		 * 
+		 * Could not generate a wrapper for purple_conversation_get_message_history in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conversation_get_message_history
+		 */
+
+		/*
+		 * Function Name: purple_conversation_clear_message_history
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_clear_message_history(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_clear_message_history(IntPtr conv);
+
+		public static void ClearMessageHistory(PurpleConversation conv)
+		{
+			purple_conversation_clear_message_history(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_sender
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_message_get_sender(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_message_get_sender(IntPtr msg);
+
+		public static string MessageGetSender(PurpleConvMessage msg)
+		{
+			return purple_conversation_message_get_sender(msg.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_message
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_message_get_message(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_message_get_message(IntPtr msg);
+
+		public static string MessageGetMessage(PurpleConvMessage msg)
+		{
+			return purple_conversation_message_get_message(msg.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_flags
+		 * Function Type: PurpleMessageFlags
+		 * Function RawType: PurpleMessageFlags
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleMessageFlags purple_conversation_message_get_flags(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Conversation.PurpleMessageFlags purple_conversation_message_get_flags(IntPtr msg);
+
+		public static Conversation.PurpleMessageFlags MessageGetFlags(PurpleConvMessage msg)
+		{
+			/* Unable to process the return value of purple_conversation_message_get_flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_timestamp
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_conversation_message_get_timestamp(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_conversation_message_get_timestamp(IntPtr msg);
+
+		public static DateTime MessageGetTimestamp(PurpleConvMessage msg)
+		{
+			/* Unable to process the return value of purple_conversation_message_get_timestamp, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_conversation
+		 * Function Type: PurpleConversation *
+		 * Function RawType: PurpleConversation
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConversation * purple_conv_im_get_conversation(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_im_get_conversation(IntPtr im);
+
+		public static PurpleConversation ConvImGetConversation(PurpleConvIm im)
+		{
+			return new PurpleConversation(purple_conv_im_get_conversation(im.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conv_im_set_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_set_icon(PurpleConvIm * im, PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_set_icon(IntPtr im, IntPtr icon);
+
+		public static void ConvImSetIcon(PurpleConvIm im, /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_icon
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_conv_im_get_icon(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_im_get_icon(IntPtr im);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr ConvImGetIcon(PurpleConvIm im)
+		{
+			/* Unable to process the return value of purple_conv_im_get_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_set_typing_state
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_set_typing_state(PurpleConvIm * im, PurpleTypingState state)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_set_typing_state(IntPtr im, Conversation.PurpleTypingState state);
+
+		public static void ConvImSetTypingState(PurpleConvIm im, Conversation.PurpleTypingState state)
+		{
+			/* Unable to process state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_typing_state
+		 * Function Type: PurpleTypingState
+		 * Function RawType: PurpleTypingState
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleTypingState purple_conv_im_get_typing_state(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Conversation.PurpleTypingState purple_conv_im_get_typing_state(IntPtr im);
+
+		public static Conversation.PurpleTypingState ConvImGetTypingState(PurpleConvIm im)
+		{
+			/* Unable to process the return value of purple_conv_im_get_typing_state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_start_typing_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_start_typing_timeout(PurpleConvIm * im, int timeout)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_start_typing_timeout(IntPtr im, int timeout);
+
+		public static void ConvImStartTypingTimeout(PurpleConvIm im, int timeout)
+		{
+			purple_conv_im_start_typing_timeout(im.Reference, timeout);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_stop_typing_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_stop_typing_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_stop_typing_timeout(IntPtr im);
+
+		public static void ConvImStopTypingTimeout(PurpleConvIm im)
+		{
+			purple_conv_im_stop_typing_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_typing_timeout
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_conv_im_get_typing_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_conv_im_get_typing_timeout(IntPtr im);
+
+		public static uint ConvImGetTypingTimeout(PurpleConvIm im)
+		{
+			return purple_conv_im_get_typing_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_set_type_again
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_set_type_again(PurpleConvIm * im, unsigned int val)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_set_type_again(IntPtr im, uint val);
+
+		public static void ConvImSetTypeAgain(PurpleConvIm im, uint val)
+		{
+			purple_conv_im_set_type_again(im.Reference, val);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_type_again
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_conv_im_get_type_again(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_conv_im_get_type_again(IntPtr im);
+
+		public static DateTime ConvImGetTypeAgain(PurpleConvIm im)
+		{
+			/* Unable to process the return value of purple_conv_im_get_type_again, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_start_send_typed_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_start_send_typed_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_start_send_typed_timeout(IntPtr im);
+
+		public static void ConvImStartSendTypedTimeout(PurpleConvIm im)
+		{
+			purple_conv_im_start_send_typed_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_stop_send_typed_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_stop_send_typed_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_stop_send_typed_timeout(IntPtr im);
+
+		public static void ConvImStopSendTypedTimeout(PurpleConvIm im)
+		{
+			purple_conv_im_stop_send_typed_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_send_typed_timeout
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_conv_im_get_send_typed_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_conv_im_get_send_typed_timeout(IntPtr im);
+
+		public static uint ConvImGetSendTypedTimeout(PurpleConvIm im)
+		{
+			return purple_conv_im_get_send_typed_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_update_typing
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_update_typing(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_update_typing(IntPtr im);
+
+		public static void ConvImUpdateTyping(PurpleConvIm im)
+		{
+			purple_conv_im_update_typing(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_present_error
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conv_present_error(char * who, PurpleAccount * account, char * what)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conv_present_error(string who, IntPtr account, string what);
+
+		public static bool ConvPresentError(string who, PurpleAccount account, string what)
+		{
+			return purple_conv_present_error(who, account.Reference, what);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_send
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_send(PurpleConvIm * im, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_send(IntPtr im, string message);
+
+		public static void ConvImSend(PurpleConvIm im, string message)
+		{
+			purple_conv_im_send(im.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_conv_send_confirm
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_send_confirm(PurpleConversation * conv, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_send_confirm(IntPtr conv, string message);
+
+		public static void ConvSendConfirm(PurpleConversation conv, string message)
+		{
+			purple_conv_send_confirm(conv.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_send_with_flags
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_send_with_flags(PurpleConvIm * im, char * message, PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_send_with_flags(IntPtr im, string message, Conversation.PurpleMessageFlags flags);
+
+		public static void ConvImSendWithFlags(PurpleConvIm im, string message, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_custom_smiley_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_custom_smiley_close(PurpleConversation * conv, char * smile)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_custom_smiley_close(IntPtr conv, string smile);
+
+		public static void ConvCustomSmileyClose(PurpleConversation conv, string smile)
+		{
+			purple_conv_custom_smiley_close(conv.Reference, smile);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_get_conversation
+		 * Function Type: PurpleConversation *
+		 * Function RawType: PurpleConversation
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConversation * purple_conv_chat_get_conversation(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_chat_get_conversation(IntPtr chat);
+
+		public static PurpleConversation ConvChatGetConversation(PurpleConvChat chat)
+		{
+			return new PurpleConversation(purple_conv_chat_get_conversation(chat.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_users
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_set_users(PurpleConvChat * chat, GList * users)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_set_users in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_set_users
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_get_users
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_get_users(PurpleConvChat * chat)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_get_users in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_get_users
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_ignore
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_ignore(PurpleConvChat * chat, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_ignore(IntPtr chat, string name);
+
+		public static void ConvChatIgnore(PurpleConvChat chat, string name)
+		{
+			purple_conv_chat_ignore(chat.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_unignore
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_unignore(PurpleConvChat * chat, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_unignore(IntPtr chat, string name);
+
+		public static void ConvChatUnignore(PurpleConvChat chat, string name)
+		{
+			purple_conv_chat_unignore(chat.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_ignored
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_set_ignored(PurpleConvChat * chat, GList * ignored)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_set_ignored in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_set_ignored
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_get_ignored
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_get_ignored(PurpleConvChat * chat)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_get_ignored in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_get_ignored
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_get_topic
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conv_chat_get_topic(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conv_chat_get_topic(IntPtr chat);
+
+		public static string ConvChatGetTopic(PurpleConvChat chat)
+		{
+			return purple_conv_chat_get_topic(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_id
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_set_id(PurpleConvChat * chat, int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_set_id(IntPtr chat, int id);
+
+		public static void ConvChatSetId(PurpleConvChat chat, int id)
+		{
+			purple_conv_chat_set_id(chat.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_get_id
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_conv_chat_get_id(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_conv_chat_get_id(IntPtr chat);
+
+		public static int ConvChatGetId(PurpleConvChat chat)
+		{
+			return purple_conv_chat_get_id(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_send
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_send(PurpleConvChat * chat, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_send(IntPtr chat, string message);
+
+		public static void ConvChatSend(PurpleConvChat chat, string message)
+		{
+			purple_conv_chat_send(chat.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_send_with_flags
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_send_with_flags(PurpleConvChat * chat, char * message, PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_send_with_flags(IntPtr chat, string message, Conversation.PurpleMessageFlags flags);
+
+		public static void ConvChatSendWithFlags(PurpleConvChat chat, string message, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_find_user
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conv_chat_find_user(PurpleConvChat * chat, char * user)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conv_chat_find_user(IntPtr chat, string user);
+
+		public static bool ConvChatFindUser(PurpleConvChat chat, string user)
+		{
+			return purple_conv_chat_find_user(chat.Reference, user);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_clear_users
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_clear_users(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_clear_users(IntPtr chat);
+
+		public static void ConvChatClearUsers(PurpleConvChat chat)
+		{
+			purple_conv_chat_clear_users(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_nick
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_set_nick(PurpleConvChat * chat, char * nick)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_set_nick(IntPtr chat, string nick);
+
+		public static void ConvChatSetNick(PurpleConvChat chat, string nick)
+		{
+			purple_conv_chat_set_nick(chat.Reference, nick);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_get_nick
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conv_chat_get_nick(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conv_chat_get_nick(IntPtr chat);
+
+		public static string ConvChatGetNick(PurpleConvChat chat)
+		{
+			return purple_conv_chat_get_nick(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_find_chat
+		 * Function Type: PurpleConversation *
+		 * Function RawType: PurpleConversation
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConversation * purple_find_chat(PurpleConnection * gc, int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_chat(IntPtr gc, int id);
+
+		public static PurpleConversation FindChat(PurpleConnection gc, int id)
+		{
+			return new PurpleConversation(purple_find_chat(gc.Reference, id));
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_left
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_left(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_left(IntPtr chat);
+
+		public static void ConvChatLeft(PurpleConvChat chat)
+		{
+			purple_conv_chat_left(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_has_left
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conv_chat_has_left(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conv_chat_has_left(IntPtr chat);
+
+		public static bool ConvChatHasLeft(PurpleConvChat chat)
+		{
+			return purple_conv_chat_has_left(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_cb_find
+		 * Function Type: PurpleConvChatBuddy *
+		 * Function RawType: PurpleConvChatBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConvChatBuddy * purple_conv_chat_cb_find(PurpleConvChat * chat, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_chat_cb_find(IntPtr chat, string name);
+
+		public static PurpleConvChatBuddy ConvChatCbFind(PurpleConvChat chat, string name)
+		{
+			return new PurpleConvChatBuddy(purple_conv_chat_cb_find(chat.Reference, name));
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_cb_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conv_chat_cb_get_name(PurpleConvChatBuddy * cb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conv_chat_cb_get_name(IntPtr cb);
+
+		public static string ConvChatCbGetName(PurpleConvChatBuddy cb)
+		{
+			return purple_conv_chat_cb_get_name(cb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_cb_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_cb_destroy(PurpleConvChatBuddy * cb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_cb_destroy(IntPtr cb);
+
+		public static void ConvChatCbDestroy(PurpleConvChatBuddy cb)
+		{
+			purple_conv_chat_cb_destroy(cb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_extended_menu
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conversation_get_extended_menu(PurpleConversation * conv)
+		 * 
+		 * Could not generate a wrapper for purple_conversation_get_extended_menu in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conversation_get_extended_menu
+		 */
+
+		/*
+		 * Function Name: purple_conversation_do_command
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conversation_do_command(PurpleConversation * conv, gchar * cmdline, gchar * markup, gchar ** error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conversation_do_command(IntPtr conv, string cmdline, string markup, IntPtr error);
+
+		public static bool DoCommand(PurpleConversation conv, string cmdline, string markup, /* Resolved as PointerToUnknownStruct to gchar */ IntPtr error)
+		{
+			/* Unable to process error, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversations_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_conversations_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversations_get_handle();
+
+		public static IntPtr ConversationsGetHandle()
+		{
+			return purple_conversations_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_conversations_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversations_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversations_init();
+
+		public static void ConversationsInit()
+		{
+			purple_conversations_init();
+		}
+
+		/*
+		 * Function Name: purple_conversations_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversations_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversations_uninit();
+
+		public static void ConversationsUninit()
+		{
+			purple_conversations_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Core.cs	948e6ddd0e30eb98461a0bdfc2f3a8cf144f15bb
+++ libpurple/wrapper/Core.cs	948e6ddd0e30eb98461a0bdfc2f3a8cf144f15bb
@@ -0,0 +1,241 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: core.h
+	 */
+	public class Core
+	{
+
+		/*
+		 * Function Name: purple_core_init
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_init(char * ui)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_init(string ui);
+
+		public static bool Init(string ui)
+		{
+			return purple_core_init(ui);
+		}
+
+		/*
+		 * Function Name: purple_core_quit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_core_quit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_core_quit();
+
+		public static void Quit()
+		{
+			purple_core_quit();
+		}
+
+		/*
+		 * Function Name: purple_core_quit_cb
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_quit_cb(gpointer unused)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_quit_cb(IntPtr unused);
+
+		public static bool QuitCb(IntPtr unused)
+		{
+			return purple_core_quit_cb(unused);
+		}
+
+		/*
+		 * Function Name: purple_core_get_version
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_core_get_version()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_core_get_version();
+
+		public static string GetVersion()
+		{
+			return purple_core_get_version();
+		}
+
+		/*
+		 * Function Name: purple_core_get_ui
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_core_get_ui()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_core_get_ui();
+
+		public static string GetUi()
+		{
+			return purple_core_get_ui();
+		}
+
+		/*
+		 * Function Name: purple_get_core
+		 * Function Type: PurpleCore *
+		 * Function RawType: PurpleCore
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCore * purple_get_core()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_get_core();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCore */ IntPtr GetCore()
+		{
+			/* Unable to process the return value of purple_get_core, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_core_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_core_set_ui_ops(PurpleCoreUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_core_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleCoreUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_core_get_ui_ops
+		 * Function Type: PurpleCoreUiOps *
+		 * Function RawType: PurpleCoreUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCoreUiOps * purple_core_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_core_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCoreUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_core_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_core_migrate
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_migrate()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_migrate();
+
+		public static bool Migrate()
+		{
+			return purple_core_migrate();
+		}
+
+		/*
+		 * Function Name: purple_core_ensure_single_instance
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_ensure_single_instance()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_ensure_single_instance();
+
+		public static bool EnsureSingleInstance()
+		{
+			return purple_core_ensure_single_instance();
+		}
+
+		/*
+		 * Function Name: purple_core_get_ui_info
+		 * Function Type: GHashTable*
+		 * Function RawType: GHashTable*
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * GHashTable* purple_core_get_ui_info()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_core_get_ui_info();
+
+		public static /* Resolved as PointerToUnknownStruct to GHashTable* */ IntPtr GetUiInfo()
+		{
+			/* Unable to process the return value of purple_core_get_ui_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Debug.cs	4b8257123cbd8b119fdcc10a47096ef67b54fc67
+++ libpurple/wrapper/Debug.cs	4b8257123cbd8b119fdcc10a47096ef67b54fc67
@@ -0,0 +1,147 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: debug.h
+	 */
+	public class Debug
+	{
+		public enum PurpleDebugLevel
+		{
+			PURPLE_DEBUG_ALL = 0,
+			PURPLE_DEBUG_MISC,
+			PURPLE_DEBUG_INFO,
+			PURPLE_DEBUG_WARNING,
+			PURPLE_DEBUG_ERROR,
+			PURPLE_DEBUG_FATAL
+		};
+
+
+		/*
+		 * Function Name: purple_debug_set_enabled
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_debug_set_enabled(gboolean enabled)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_debug_set_enabled(bool enabled);
+
+		public static void SetEnabled(bool enabled)
+		{
+			purple_debug_set_enabled(enabled);
+		}
+
+		/*
+		 * Function Name: purple_debug_is_enabled
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_debug_is_enabled()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_debug_is_enabled();
+
+		public static bool IsEnabled()
+		{
+			return purple_debug_is_enabled();
+		}
+
+		/*
+		 * Function Name: purple_debug_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_debug_set_ui_ops(PurpleDebugUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_debug_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleDebugUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_debug_get_ui_ops
+		 * Function Type: PurpleDebugUiOps *
+		 * Function RawType: PurpleDebugUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDebugUiOps * purple_debug_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_debug_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDebugUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_debug_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_debug_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_debug_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_debug_init();
+
+		public static void Init()
+		{
+			purple_debug_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Desktopitem.cs	f9a5cc2a2dbd0084a4986a88322fa94a124384a5
+++ libpurple/wrapper/Desktopitem.cs	f9a5cc2a2dbd0084a4986a88322fa94a124384a5
@@ -0,0 +1,153 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: desktopitem.h
+	 */
+	public class Desktopitem
+	{
+		public enum PurpleDesktopItemType
+		{
+			PURPLE_DESKTOP_ITEM_TYPE_NULL = 0,
+			PURPLE_DESKTOP_ITEM_TYPE_OTHER,
+			PURPLE_DESKTOP_ITEM_TYPE_APPLICATION,
+			PURPLE_DESKTOP_ITEM_TYPE_LINK,
+			PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE,
+			PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE,
+			PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY,
+			PURPLE_DESKTOP_ITEM_TYPE_SERVICE,
+			PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE
+		};
+
+
+		/*
+		 * Function Name: purple_desktop_item_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_desktop_item_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_desktop_item_get_type();
+
+		public static /* libobject */ IntPtr DesktopItemGetType()
+		{
+			/* Unable to process the return value of purple_desktop_item_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_new_from_file
+		 * Function Type: PurpleDesktopItem *
+		 * Function RawType: PurpleDesktopItem
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDesktopItem * purple_desktop_item_new_from_file(char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_desktop_item_new_from_file(string filename);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr DesktopItemNewFromFile(string filename)
+		{
+			/* Unable to process the return value of purple_desktop_item_new_from_file, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_get_entry_type
+		 * Function Type: PurpleDesktopItemType
+		 * Function RawType: PurpleDesktopItemType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleDesktopItemType purple_desktop_item_get_entry_type(PurpleDesktopItem * item)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Desktopitem.PurpleDesktopItemType purple_desktop_item_get_entry_type(IntPtr item);
+
+		public static Desktopitem.PurpleDesktopItemType DesktopItemGetEntryType(/* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr item)
+		{
+			/* Unable to process item, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_copy
+		 * Function Type: PurpleDesktopItem *
+		 * Function RawType: PurpleDesktopItem
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDesktopItem * purple_desktop_item_copy(PurpleDesktopItem * item)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_desktop_item_copy(IntPtr item);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr DesktopItemCopy(/* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr item)
+		{
+			/* Unable to process item, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_unref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_desktop_item_unref(PurpleDesktopItem * item)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_desktop_item_unref(IntPtr item);
+
+		public static void DesktopItemUnref(/* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr item)
+		{
+			/* Unable to process item, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Dnsquery.cs	c9186e2f23272635e0be6fe133f824bfee086ede
+++ libpurple/wrapper/Dnsquery.cs	c9186e2f23272635e0be6fe133f824bfee086ede
@@ -0,0 +1,195 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: dnsquery.h
+	 */
+	public class Dnsquery
+	{
+		public delegate void PurpleDnsQueryConnectFunction(IntPtr hosts, IntPtr data, string error_message);
+		public delegate void PurpleDnsQueryResolvedCallback(IntPtr query_data, IntPtr hosts);
+		public delegate void PurpleDnsQueryFailedCallback(IntPtr query_data, string error_message);
+
+		/*
+		 * Function Name: purple_dnsquery_a
+		 * Function Type: PurpleDnsQueryData *
+		 * Function RawType: PurpleDnsQueryData
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDnsQueryData * purple_dnsquery_a(char * hostname, int port, PurpleDnsQueryConnectFunction callback, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_dnsquery_a(string hostname, int port, IntPtr callback, IntPtr data);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr A(string hostname, int port, Dnsquery.PurpleDnsQueryConnectFunction callback, IntPtr data)
+		{
+			/* Unable to process callback, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_destroy(PurpleDnsQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_destroy(IntPtr query_data);
+
+		public static void Destroy(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_set_ui_ops(PurpleDnsQueryUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_get_ui_ops
+		 * Function Type: PurpleDnsQueryUiOps *
+		 * Function RawType: PurpleDnsQueryUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDnsQueryUiOps * purple_dnsquery_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_dnsquery_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDnsQueryUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_dnsquery_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_get_host
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_dnsquery_get_host(PurpleDnsQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_dnsquery_get_host(IntPtr query_data);
+
+		public static string GetHost(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_get_port
+		 * Function Type: unsigned short
+		 * Function RawType: short
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned short purple_dnsquery_get_port(PurpleDnsQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_dnsquery_get_port(IntPtr query_data);
+
+		public static ushort GetPort(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_init();
+
+		public static void Init()
+		{
+			purple_dnsquery_init();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_uninit();
+
+		public static void Uninit()
+		{
+			purple_dnsquery_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Dnssrv.cs	c59bb8fbf8fc58be3aa973db86532fc092a63c0f
+++ libpurple/wrapper/Dnssrv.cs	c59bb8fbf8fc58be3aa973db86532fc092a63c0f
@@ -0,0 +1,160 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: dnssrv.h
+	 */
+	public class Dnssrv
+	{
+		public delegate void PurpleSrvCallback(IntPtr resp, int results, IntPtr data);
+		public delegate void PurpleTxtCallback(IntPtr responses, IntPtr data);
+
+		/*
+		 * Function Name: purple_srv_resolve
+		 * Function Type: PurpleSrvQueryData *
+		 * Function RawType: PurpleSrvQueryData
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSrvQueryData * purple_srv_resolve(char * protocol, char * transport, char * domain, PurpleSrvCallback cb, gpointer extradata)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_srv_resolve(string protocol, string transport, string domain, IntPtr cb, IntPtr extradata);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr SrvResolve(string protocol, string transport, string domain, Dnssrv.PurpleSrvCallback cb, IntPtr extradata)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_srv_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_srv_cancel(PurpleSrvQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_srv_cancel(IntPtr query_data);
+
+		public static void SrvCancel(/* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_resolve
+		 * Function Type: PurpleSrvQueryData *
+		 * Function RawType: PurpleSrvQueryData
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSrvQueryData * purple_txt_resolve(char * owner, char * domain, PurpleTxtCallback cb, gpointer extradata)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_txt_resolve(string owner, string domain, IntPtr cb, IntPtr extradata);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr TxtResolve(string owner, string domain, Dnssrv.PurpleTxtCallback cb, IntPtr extradata)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_txt_cancel(PurpleSrvQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_txt_cancel(IntPtr query_data);
+
+		public static void TxtCancel(/* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_response_get_content
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_txt_response_get_content(PurpleTxtResponse * resp)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_txt_response_get_content(IntPtr resp);
+
+		public static string TxtResponseGetContent(/* Resolved as PointerToUnknownStruct to PurpleTxtResponse */ IntPtr resp)
+		{
+			/* Unable to process resp, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_response_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_txt_response_destroy(PurpleTxtResponse * resp)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_txt_response_destroy(IntPtr resp);
+
+		public static void TxtResponseDestroy(/* Resolved as PointerToUnknownStruct to PurpleTxtResponse */ IntPtr resp)
+		{
+			/* Unable to process resp, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Eventloop.cs	f5750e76f742b83626b54d75d996af08b0ee85ba
+++ libpurple/wrapper/Eventloop.cs	f5750e76f742b83626b54d75d996af08b0ee85ba
@@ -0,0 +1,179 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: eventloop.h
+	 */
+	public class Eventloop
+	{
+		public enum PurpleInputCondition
+		{
+			PURPLE_INPUT_READ = 1 << 0,
+			PURPLE_INPUT_WRITE = 1 << 1
+		};
+
+		public delegate void PurpleInputFunction(/* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg2);
+
+		/*
+		 * Function Name: purple_timeout_add
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_timeout_add(guint interval, GSourceFunc function, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_timeout_add(uint interval, IntPtr function, IntPtr data);
+
+		public static uint TimeoutAdd(uint interval, /* libobject */ IntPtr function, IntPtr data)
+		{
+			/* Unable to process function, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_timeout_add_seconds
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_timeout_add_seconds(guint interval, GSourceFunc function, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_timeout_add_seconds(uint interval, IntPtr function, IntPtr data);
+
+		public static uint TimeoutAddSeconds(uint interval, /* libobject */ IntPtr function, IntPtr data)
+		{
+			/* Unable to process function, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_timeout_remove
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_timeout_remove(guint handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_timeout_remove(uint handle);
+
+		public static bool TimeoutRemove(uint handle)
+		{
+			return purple_timeout_remove(handle);
+		}
+
+		/*
+		 * Function Name: purple_input_remove
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_input_remove(guint handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_input_remove(uint handle);
+
+		public static bool InputRemove(uint handle)
+		{
+			return purple_input_remove(handle);
+		}
+
+		/*
+		 * Function Name: purple_input_get_error
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_input_get_error(int fd, int * error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_input_get_error(int fd, IntPtr error);
+
+		public static int InputGetError(int fd, /* Resolved as PointerToUnknownStruct to int */ IntPtr error)
+		{
+			/* Unable to process error, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_eventloop_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_eventloop_set_ui_ops(PurpleEventLoopUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_eventloop_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleEventLoopUiOps ops)
+		{
+			purple_eventloop_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_eventloop_get_ui_ops
+		 * Function Type: PurpleEventLoopUiOps *
+		 * Function RawType: PurpleEventLoopUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleEventLoopUiOps * purple_eventloop_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_eventloop_get_ui_ops();
+
+		public static PurpleEventLoopUiOps GetUiOps()
+		{
+			return new PurpleEventLoopUiOps(purple_eventloop_get_ui_ops());
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Ft.cs	d26b0484f98878bb1afdc07340307d8d2decb390
+++ libpurple/wrapper/Ft.cs	d26b0484f98878bb1afdc07340307d8d2decb390
@@ -0,0 +1,822 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: ft.h
+	 */
+	public class Ft
+	{
+		public enum PurpleXferType
+		{
+			PURPLE_XFER_UNKNOWN = 0,
+			PURPLE_XFER_SEND,
+			PURPLE_XFER_RECEIVE
+		};
+
+		public enum PurpleXferStatusType
+		{
+			PURPLE_XFER_STATUS_UNKNOWN = 0,
+			PURPLE_XFER_STATUS_NOT_STARTED,
+			PURPLE_XFER_STATUS_ACCEPTED,
+			PURPLE_XFER_STATUS_STARTED,
+			PURPLE_XFER_STATUS_DONE,
+			PURPLE_XFER_STATUS_CANCEL_LOCAL,
+			PURPLE_XFER_STATUS_CANCEL_REMOTE
+		};
+
+
+		/*
+		 * Function Name: purple_xfers_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_xfers_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_xfers_get_all in file "ft.h".
+		 * Message: Unknown inner-type of argument 0 of purple_xfers_get_all
+		 */
+
+		/*
+		 * Function Name: purple_xfer_ref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_ref(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_ref(IntPtr xfer);
+
+		public static void XferRef(PurpleXfer xfer)
+		{
+			purple_xfer_ref(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_unref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_unref(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_unref(IntPtr xfer);
+
+		public static void XferUnref(PurpleXfer xfer)
+		{
+			purple_xfer_unref(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_request
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_request(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_request(IntPtr xfer);
+
+		public static void XferRequest(PurpleXfer xfer)
+		{
+			purple_xfer_request(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_request_accepted
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_request_accepted(PurpleXfer * xfer, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_request_accepted(IntPtr xfer, string filename);
+
+		public static void XferRequestAccepted(PurpleXfer xfer, string filename)
+		{
+			purple_xfer_request_accepted(xfer.Reference, filename);
+		}
+
+		/*
+		 * Function Name: purple_xfer_request_denied
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_request_denied(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_request_denied(IntPtr xfer);
+
+		public static void XferRequestDenied(PurpleXfer xfer)
+		{
+			purple_xfer_request_denied(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_type
+		 * Function Type: PurpleXferType
+		 * Function RawType: PurpleXferType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleXferType purple_xfer_get_type(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Ft.PurpleXferType purple_xfer_get_type(IntPtr xfer);
+
+		public static Ft.PurpleXferType XferGetType(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_xfer_get_account(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfer_get_account(IntPtr xfer);
+
+		public static PurpleAccount XferGetAccount(PurpleXfer xfer)
+		{
+			return new PurpleAccount(purple_xfer_get_account(xfer.Reference));
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_remote_user
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_remote_user(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_remote_user(IntPtr xfer);
+
+		public static string XferGetRemoteUser(PurpleXfer xfer)
+		{
+			return purple_xfer_get_remote_user(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_status
+		 * Function Type: PurpleXferStatusType
+		 * Function RawType: PurpleXferStatusType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleXferStatusType purple_xfer_get_status(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Ft.PurpleXferStatusType purple_xfer_get_status(IntPtr xfer);
+
+		public static Ft.PurpleXferStatusType XferGetStatus(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_status, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_is_canceled
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_xfer_is_canceled(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_xfer_is_canceled(IntPtr xfer);
+
+		public static bool XferIsCanceled(PurpleXfer xfer)
+		{
+			return purple_xfer_is_canceled(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_is_completed
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_xfer_is_completed(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_xfer_is_completed(IntPtr xfer);
+
+		public static bool XferIsCompleted(PurpleXfer xfer)
+		{
+			return purple_xfer_is_completed(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_filename(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_filename(IntPtr xfer);
+
+		public static string XferGetFilename(PurpleXfer xfer)
+		{
+			return purple_xfer_get_filename(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_local_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_local_filename(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_local_filename(IntPtr xfer);
+
+		public static string XferGetLocalFilename(PurpleXfer xfer)
+		{
+			return purple_xfer_get_local_filename(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_bytes_sent
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_xfer_get_bytes_sent(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_bytes_sent(IntPtr xfer);
+
+		public static ulong XferGetBytesSent(PurpleXfer xfer)
+		{
+			return purple_xfer_get_bytes_sent(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_bytes_remaining
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_xfer_get_bytes_remaining(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_bytes_remaining(IntPtr xfer);
+
+		public static ulong XferGetBytesRemaining(PurpleXfer xfer)
+		{
+			return purple_xfer_get_bytes_remaining(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_xfer_get_size(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_size(IntPtr xfer);
+
+		public static ulong XferGetSize(PurpleXfer xfer)
+		{
+			return purple_xfer_get_size(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_progress
+		 * Function Type: double
+		 * Function RawType: double
+		 * Function Category: Native
+		 */
+		/*
+		 * double purple_xfer_get_progress(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern double purple_xfer_get_progress(IntPtr xfer);
+
+		public static double XferGetProgress(PurpleXfer xfer)
+		{
+			return purple_xfer_get_progress(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_local_port
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_xfer_get_local_port(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_xfer_get_local_port(IntPtr xfer);
+
+		public static uint XferGetLocalPort(PurpleXfer xfer)
+		{
+			return purple_xfer_get_local_port(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_remote_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_remote_ip(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_remote_ip(IntPtr xfer);
+
+		public static string XferGetRemoteIp(PurpleXfer xfer)
+		{
+			return purple_xfer_get_remote_ip(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_remote_port
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_xfer_get_remote_port(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_xfer_get_remote_port(IntPtr xfer);
+
+		public static uint XferGetRemotePort(PurpleXfer xfer)
+		{
+			return purple_xfer_get_remote_port(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_start_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_xfer_get_start_time(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_start_time(IntPtr xfer);
+
+		public static DateTime XferGetStartTime(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_start_time, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_end_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_xfer_get_end_time(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_end_time(IntPtr xfer);
+
+		public static DateTime XferGetEndTime(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_end_time, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_completed
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_completed(PurpleXfer * xfer, gboolean completed)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_completed(IntPtr xfer, bool completed);
+
+		public static void XferSetCompleted(PurpleXfer xfer, bool completed)
+		{
+			purple_xfer_set_completed(xfer.Reference, completed);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_message
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_message(PurpleXfer * xfer, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_message(IntPtr xfer, string message);
+
+		public static void XferSetMessage(PurpleXfer xfer, string message)
+		{
+			purple_xfer_set_message(xfer.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_filename
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_filename(PurpleXfer * xfer, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_filename(IntPtr xfer, string filename);
+
+		public static void XferSetFilename(PurpleXfer xfer, string filename)
+		{
+			purple_xfer_set_filename(xfer.Reference, filename);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_local_filename
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_local_filename(PurpleXfer * xfer, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_local_filename(IntPtr xfer, string filename);
+
+		public static void XferSetLocalFilename(PurpleXfer xfer, string filename)
+		{
+			purple_xfer_set_local_filename(xfer.Reference, filename);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_size
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_size(PurpleXfer * xfer, size_t size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_size(IntPtr xfer, ulong size);
+
+		public static void XferSetSize(PurpleXfer xfer, ulong size)
+		{
+			purple_xfer_set_size(xfer.Reference, size);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_bytes_sent
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_bytes_sent(PurpleXfer * xfer, size_t bytes_sent)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_bytes_sent(IntPtr xfer, ulong bytes_sent);
+
+		public static void XferSetBytesSent(PurpleXfer xfer, ulong bytes_sent)
+		{
+			purple_xfer_set_bytes_sent(xfer.Reference, bytes_sent);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_ui_ops
+		 * Function Type: PurpleXferUiOps *
+		 * Function RawType: PurpleXferUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleXferUiOps * purple_xfer_get_ui_ops(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfer_get_ui_ops(IntPtr xfer);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleXferUiOps */ IntPtr XferGetUiOps(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_read
+		 * Function Type: gssize
+		 * Function RawType: gssize
+		 * Function Category: Native
+		 */
+		/*
+		 * gssize purple_xfer_read(PurpleXfer * xfer, guchar ** buffer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern long purple_xfer_read(IntPtr xfer, IntPtr buffer);
+
+		public static long XferRead(PurpleXfer xfer, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr buffer)
+		{
+			/* Unable to process buffer, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_write
+		 * Function Type: gssize
+		 * Function RawType: gssize
+		 * Function Category: Native
+		 */
+		/*
+		 * gssize purple_xfer_write(PurpleXfer * xfer, guchar * buffer, gsize size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern long purple_xfer_write(IntPtr xfer, IntPtr buffer, ulong size);
+
+		public static long XferWrite(PurpleXfer xfer, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr buffer, ulong size)
+		{
+			/* Unable to process buffer, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_end
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_end(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_end(IntPtr xfer);
+
+		public static void XferEnd(PurpleXfer xfer)
+		{
+			purple_xfer_end(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_add(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_add(IntPtr xfer);
+
+		public static void XferAdd(PurpleXfer xfer)
+		{
+			purple_xfer_add(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_cancel_local
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_cancel_local(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_cancel_local(IntPtr xfer);
+
+		public static void XferCancelLocal(PurpleXfer xfer)
+		{
+			purple_xfer_cancel_local(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_cancel_remote
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_cancel_remote(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_cancel_remote(IntPtr xfer);
+
+		public static void XferCancelRemote(PurpleXfer xfer)
+		{
+			purple_xfer_cancel_remote(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_error
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_error(PurpleXferType type, PurpleAccount * account, char * who, char * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_error(Ft.PurpleXferType type, IntPtr account, string who, string msg);
+
+		public static void XferError(Ft.PurpleXferType type, PurpleAccount account, string who, string msg)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_update_progress
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_update_progress(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_update_progress(IntPtr xfer);
+
+		public static void XferUpdateProgress(PurpleXfer xfer)
+		{
+			purple_xfer_update_progress(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_conversation_write
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_conversation_write(PurpleXfer * xfer, char * message, gboolean is_error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_conversation_write(IntPtr xfer, string message, bool is_error);
+
+		public static void XferConversationWrite(PurpleXfer xfer, string message, bool is_error)
+		{
+			purple_xfer_conversation_write(xfer.Reference, message, is_error);
+		}
+
+		/*
+		 * Function Name: purple_xfers_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_xfers_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfers_get_handle();
+
+		public static IntPtr XfersGetHandle()
+		{
+			return purple_xfers_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_xfers_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfers_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfers_init();
+
+		public static void XfersInit()
+		{
+			purple_xfers_init();
+		}
+
+		/*
+		 * Function Name: purple_xfers_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfers_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfers_uninit();
+
+		public static void XfersUninit()
+		{
+			purple_xfers_uninit();
+		}
+
+		/*
+		 * Function Name: purple_xfers_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfers_set_ui_ops(PurpleXferUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfers_set_ui_ops(IntPtr ops);
+
+		public static void XfersSetUiOps(/* Resolved as PointerToUnknownStruct to PurpleXferUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfers_get_ui_ops
+		 * Function Type: PurpleXferUiOps *
+		 * Function RawType: PurpleXferUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleXferUiOps * purple_xfers_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfers_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleXferUiOps */ IntPtr XfersGetUiOps()
+		{
+			/* Unable to process the return value of purple_xfers_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Idle.cs	93dc3e0f19f2a89eb61c29871058d6e4b5a27bfe
+++ libpurple/wrapper/Idle.cs	93dc3e0f19f2a89eb61c29871058d6e4b5a27bfe
@@ -0,0 +1,155 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: idle.h
+	 */
+	public class Idle
+	{
+
+		/*
+		 * Function Name: purple_idle_touch
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_touch()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_touch();
+
+		public static void Touch()
+		{
+			purple_idle_touch();
+		}
+
+		/*
+		 * Function Name: purple_idle_set
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_set(time_t time)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_set(ulong time);
+
+		public static void Set(DateTime time)
+		{
+			ulong _PurpleWrapper_param0 = (ulong)(time - new DateTime(1970, 1, 1)).TotalSeconds;
+			purple_idle_set(_PurpleWrapper_param0);
+		}
+
+		/*
+		 * Function Name: purple_idle_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_set_ui_ops(PurpleIdleUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleIdleUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_idle_get_ui_ops
+		 * Function Type: PurpleIdleUiOps *
+		 * Function RawType: PurpleIdleUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleIdleUiOps * purple_idle_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_idle_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleIdleUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_idle_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_idle_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_init();
+
+		public static void Init()
+		{
+			purple_idle_init();
+		}
+
+		/*
+		 * Function Name: purple_idle_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_uninit();
+
+		public static void Uninit()
+		{
+			purple_idle_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Imgstore.cs	b1afc7cf2aede378f09ae050e66aaf8be55eb8b9
+++ libpurple/wrapper/Imgstore.cs	b1afc7cf2aede378f09ae050e66aaf8be55eb8b9
@@ -0,0 +1,314 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: imgstore.h
+	 */
+	public class Imgstore
+	{
+
+		/*
+		 * Function Name: purple_imgstore_add
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_add(gpointer data, size_t size, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_add(IntPtr data, ulong size, string filename);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr Add(IntPtr data, ulong size, string filename)
+		{
+			/* Unable to process the return value of purple_imgstore_add, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_new_from_file
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_new_from_file(char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_new_from_file(string path);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr NewFromFile(string path)
+		{
+			/* Unable to process the return value of purple_imgstore_new_from_file, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_add_with_id
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_imgstore_add_with_id(gpointer data, size_t size, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_imgstore_add_with_id(IntPtr data, ulong size, string filename);
+
+		public static int AddWithId(IntPtr data, ulong size, string filename)
+		{
+			return purple_imgstore_add_with_id(data, size, filename);
+		}
+
+		/*
+		 * Function Name: purple_imgstore_find_by_id
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_find_by_id(int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_find_by_id(int id);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr FindById(int id)
+		{
+			/* Unable to process the return value of purple_imgstore_find_by_id, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_data
+		 * Function Type: gconstpointer
+		 * Function RawType: gconstpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gconstpointer purple_imgstore_get_data(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_get_data(IntPtr img);
+
+		public static IntPtr GetData(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_imgstore_get_size(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_imgstore_get_size(IntPtr img);
+
+		public static ulong GetSize(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_imgstore_get_filename(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_imgstore_get_filename(IntPtr img);
+
+		public static string GetFilename(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_extension
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_imgstore_get_extension(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_imgstore_get_extension(IntPtr img);
+
+		public static string GetExtension(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_ref
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_ref(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_ref(IntPtr img);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr Ref(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_unref
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_unref(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_unref(IntPtr img);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr Unref(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_ref_by_id
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_ref_by_id(int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_ref_by_id(int id);
+
+		public static void RefById(int id)
+		{
+			purple_imgstore_ref_by_id(id);
+		}
+
+		/*
+		 * Function Name: purple_imgstore_unref_by_id
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_unref_by_id(int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_unref_by_id(int id);
+
+		public static void UnrefById(int id)
+		{
+			purple_imgstore_unref_by_id(id);
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_imgstore_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_imgstore_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_init();
+
+		public static void Init()
+		{
+			purple_imgstore_init();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_uninit();
+
+		public static void Uninit()
+		{
+			purple_imgstore_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Log.cs	930e955549ed2b0e8e9a3288c148164ef506cdb7
+++ libpurple/wrapper/Log.cs	930e955549ed2b0e8e9a3288c148164ef506cdb7
@@ -0,0 +1,510 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 */
+	public class Log
+	{
+		public enum PurpleLogType
+		{
+			PURPLE_LOG_IM,
+			PURPLE_LOG_CHAT,
+			PURPLE_LOG_SYSTEM
+		};
+
+		public enum PurpleLogReadFlags
+		{
+			PURPLE_LOG_READ_NO_NEWLINE = 1
+		};
+
+		public delegate void PurpleLogSetCallback(IntPtr sets, IntPtr set);
+
+		/*
+		 * Function Name: purple_log_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_free(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_free(IntPtr log);
+
+		public static void Free(PurpleLog log)
+		{
+			purple_log_free(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_read
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_log_read(PurpleLog * log, PurpleLogReadFlags * flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_log_read(IntPtr log, Log.PurpleLogReadFlags flags);
+
+		public static string Read(PurpleLog log, Log.PurpleLogReadFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_get_logs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_log_get_logs(PurpleLogType type, char * name, PurpleAccount * account)
+		 * 
+		 * Could not generate a wrapper for purple_log_get_logs in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_get_logs
+		 */
+
+		/*
+		 * Function Name: purple_log_get_log_sets
+		 * Function Type: GHashTable *
+		 * Function RawType: GHashTable
+		 * Function Category: PointerToGHashTable
+		 */
+		/*
+		 * GHashTable * purple_log_get_log_sets()
+		 * 
+		 * Could not generate a wrapper for purple_log_get_log_sets in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_get_log_sets
+		 */
+
+		/*
+		 * Function Name: purple_log_get_system_logs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_log_get_system_logs(PurpleAccount * account)
+		 * 
+		 * Could not generate a wrapper for purple_log_get_system_logs in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_get_system_logs
+		 */
+
+		/*
+		 * Function Name: purple_log_get_size
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_get_size(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_get_size(IntPtr log);
+
+		public static int GetSize(PurpleLog log)
+		{
+			return purple_log_get_size(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_get_total_size
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_get_total_size(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_get_total_size(Log.PurpleLogType type, string name, IntPtr account);
+
+		public static int GetTotalSize(Log.PurpleLogType type, string name, PurpleAccount account)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_get_activity_score
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_get_activity_score(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_get_activity_score(Log.PurpleLogType type, string name, IntPtr account);
+
+		public static int GetActivityScore(Log.PurpleLogType type, string name, PurpleAccount account)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_is_deletable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_is_deletable(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_is_deletable(IntPtr log);
+
+		public static bool IsDeletable(PurpleLog log)
+		{
+			return purple_log_is_deletable(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_delete
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_delete(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_delete(IntPtr log);
+
+		public static bool Delete(PurpleLog log)
+		{
+			return purple_log_delete(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_get_log_dir
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_log_get_log_dir(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_log_get_log_dir(Log.PurpleLogType type, string name, IntPtr account);
+
+		public static string GetLogDir(Log.PurpleLogType type, string name, PurpleAccount account)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_compare
+		 * Function Type: gint
+		 * Function RawType: gint
+		 * Function Category: Native
+		 */
+		/*
+		 * gint purple_log_compare(gconstpointer y, gconstpointer z)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_compare(IntPtr y, IntPtr z);
+
+		public static int Compare(IntPtr y, IntPtr z)
+		{
+			return purple_log_compare(y, z);
+		}
+
+		/*
+		 * Function Name: purple_log_set_compare
+		 * Function Type: gint
+		 * Function RawType: gint
+		 * Function Category: Native
+		 */
+		/*
+		 * gint purple_log_set_compare(gconstpointer y, gconstpointer z)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_set_compare(IntPtr y, IntPtr z);
+
+		public static int SetCompare(IntPtr y, IntPtr z)
+		{
+			return purple_log_set_compare(y, z);
+		}
+
+		/*
+		 * Function Name: purple_log_set_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_set_free(PurpleLogSet * set)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_set_free(IntPtr set);
+
+		public static void SetFree(PurpleLogSet set)
+		{
+			purple_log_set_free(set.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_common_writer
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_common_writer(PurpleLog * log, char * ext)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_common_writer(IntPtr log, string ext);
+
+		public static void CommonWriter(PurpleLog log, string ext)
+		{
+			purple_log_common_writer(log.Reference, ext);
+		}
+
+		/*
+		 * Function Name: purple_log_common_sizer
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_common_sizer(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_common_sizer(IntPtr log);
+
+		public static int CommonSizer(PurpleLog log)
+		{
+			return purple_log_common_sizer(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_common_deleter
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_common_deleter(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_common_deleter(IntPtr log);
+
+		public static bool CommonDeleter(PurpleLog log)
+		{
+			return purple_log_common_deleter(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_common_is_deletable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_common_is_deletable(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_common_is_deletable(IntPtr log);
+
+		public static bool CommonIsDeletable(PurpleLog log)
+		{
+			return purple_log_common_is_deletable(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_free(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_free(IntPtr logger);
+
+		public static void LoggerFree(PurpleLogLogger logger)
+		{
+			purple_log_logger_free(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_add(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_add(IntPtr logger);
+
+		public static void LoggerAdd(PurpleLogLogger logger)
+		{
+			purple_log_logger_add(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_remove
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_remove(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_remove(IntPtr logger);
+
+		public static void LoggerRemove(PurpleLogLogger logger)
+		{
+			purple_log_logger_remove(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_set
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_set(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_set(IntPtr logger);
+
+		public static void LoggerSet(PurpleLogLogger logger)
+		{
+			purple_log_logger_set(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_get
+		 * Function Type: PurpleLogLogger *
+		 * Function RawType: PurpleLogLogger
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleLogLogger * purple_log_logger_get()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_log_logger_get();
+
+		public static PurpleLogLogger LoggerGet()
+		{
+			return new PurpleLogLogger(purple_log_logger_get());
+		}
+
+		/*
+		 * Function Name: purple_log_logger_get_options
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_log_logger_get_options()
+		 * 
+		 * Could not generate a wrapper for purple_log_logger_get_options in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_logger_get_options
+		 */
+
+		/*
+		 * Function Name: purple_log_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_init();
+
+		public static void Init()
+		{
+			purple_log_init();
+		}
+
+		/*
+		 * Function Name: purple_log_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_log_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_log_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_log_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_log_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_uninit();
+
+		public static void Uninit()
+		{
+			purple_log_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Media.cs	e2af2714fadc4bb277a70ef33dfac6839ac673ff
+++ libpurple/wrapper/Media.cs	e2af2714fadc4bb277a70ef33dfac6839ac673ff
@@ -0,0 +1,781 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: media.h
+	 */
+	public class Media
+	{
+		public enum PurpleMediaCaps
+		{
+			PURPLE_MEDIA_CAPS_NONE = 0,
+			PURPLE_MEDIA_CAPS_AUDIO = 1,
+			PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION = 1 << 1,
+			PURPLE_MEDIA_CAPS_VIDEO = 1 << 2,
+			PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION = 1 << 3,
+			PURPLE_MEDIA_CAPS_AUDIO_VIDEO = 1 << 4,
+			PURPLE_MEDIA_CAPS_MODIFY_SESSION = 1 << 5,
+			PURPLE_MEDIA_CAPS_CHANGE_DIRECTION = 1 << 6
+		};
+
+		public enum PurpleMediaSessionType
+		{
+			PURPLE_MEDIA_NONE = 0,
+			PURPLE_MEDIA_RECV_AUDIO = 1 << 0,
+			PURPLE_MEDIA_SEND_AUDIO = 1 << 1,
+			PURPLE_MEDIA_RECV_VIDEO = 1 << 2,
+			PURPLE_MEDIA_SEND_VIDEO = 1 << 3,
+			PURPLE_MEDIA_AUDIO = PURPLE_MEDIA_RECV_AUDIO | PURPLE_MEDIA_SEND_AUDIO,
+			PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO
+		};
+
+		public enum PurpleMediaState
+		{
+			PURPLE_MEDIA_STATE_NEW = 0,
+			PURPLE_MEDIA_STATE_CONNECTED,
+			PURPLE_MEDIA_STATE_END
+		};
+
+		public enum PurpleMediaInfoType
+		{
+			PURPLE_MEDIA_INFO_HANGUP = 0,
+			PURPLE_MEDIA_INFO_ACCEPT,
+			PURPLE_MEDIA_INFO_REJECT,
+			PURPLE_MEDIA_INFO_MUTE,
+			PURPLE_MEDIA_INFO_UNMUTE,
+			PURPLE_MEDIA_INFO_HOLD,
+			PURPLE_MEDIA_INFO_UNHOLD
+		};
+
+		public enum PurpleMediaCandidateType
+		{
+			PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
+			PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
+			PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
+			PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
+			PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST
+		};
+
+		public enum PurpleMediaComponentType
+		{
+			PURPLE_MEDIA_COMPONENT_NONE = 0,
+			PURPLE_MEDIA_COMPONENT_RTP = 1,
+			PURPLE_MEDIA_COMPONENT_RTCP = 2
+		};
+
+		public enum PurpleMediaNetworkProtocol
+		{
+			PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
+			PURPLE_MEDIA_NETWORK_PROTOCOL_TCP
+		};
+
+
+		/*
+		 * Function Name: purple_media_session_type_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_session_type_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_session_type_get_type();
+
+		public static /* libobject */ IntPtr SessionTypeGetType()
+		{
+			/* Unable to process the return value of purple_media_session_type_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_type_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_candidate_type_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_candidate_type_get_type();
+
+		public static /* libobject */ IntPtr CandidateTypeGetType()
+		{
+			/* Unable to process the return value of purple_media_candidate_type_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_network_protocol_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_network_protocol_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_network_protocol_get_type();
+
+		public static /* libobject */ IntPtr NetworkProtocolGetType()
+		{
+			/* Unable to process the return value of purple_media_network_protocol_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_type();
+
+		public static /* libobject */ IntPtr GetType()
+		{
+			/* Unable to process the return value of purple_media_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_state_changed_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_state_changed_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_state_changed_get_type();
+
+		public static /* libobject */ IntPtr StateChangedGetType()
+		{
+			/* Unable to process the return value of purple_media_state_changed_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_info_type_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_info_type_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_info_type_get_type();
+
+		public static /* libobject */ IntPtr InfoTypeGetType()
+		{
+			/* Unable to process the return value of purple_media_info_type_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_candidate_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_candidate_get_type();
+
+		public static /* libobject */ IntPtr CandidateGetType()
+		{
+			/* Unable to process the return value of purple_media_candidate_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_list_copy
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_candidate_list_copy(GList * candidates)
+		 * 
+		 * Could not generate a wrapper for purple_media_candidate_list_copy in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_candidate_list_copy
+		 */
+
+		/*
+		 * Function Name: purple_media_candidate_list_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_candidate_list_free(GList * candidates)
+		 * 
+		 * Could not generate a wrapper for purple_media_candidate_list_free in file "media.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_media_candidate_get_foundation
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_foundation(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_foundation(IntPtr candidate);
+
+		public static string CandidateGetFoundation(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_component_id
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_candidate_get_component_id(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_candidate_get_component_id(IntPtr candidate);
+
+		public static uint CandidateGetComponentId(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_ip(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_ip(IntPtr candidate);
+
+		public static string CandidateGetIp(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_port
+		 * Function Type: guint16
+		 * Function RawType: guint16
+		 * Function Category: Native
+		 */
+		/*
+		 * guint16 purple_media_candidate_get_port(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_media_candidate_get_port(IntPtr candidate);
+
+		public static ushort CandidateGetPort(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_base_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_base_ip(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_base_ip(IntPtr candidate);
+
+		public static string CandidateGetBaseIp(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_base_port
+		 * Function Type: guint16
+		 * Function RawType: guint16
+		 * Function Category: Native
+		 */
+		/*
+		 * guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_media_candidate_get_base_port(IntPtr candidate);
+
+		public static ushort CandidateGetBasePort(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_priority
+		 * Function Type: guint32
+		 * Function RawType: guint32
+		 * Function Category: Native
+		 */
+		/*
+		 * guint32 purple_media_candidate_get_priority(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_candidate_get_priority(IntPtr candidate);
+
+		public static uint CandidateGetPriority(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_username
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_username(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_username(IntPtr candidate);
+
+		public static string CandidateGetUsername(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_password
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_password(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_password(IntPtr candidate);
+
+		public static string CandidateGetPassword(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_ttl
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_candidate_get_ttl(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_candidate_get_ttl(IntPtr candidate);
+
+		public static uint CandidateGetTtl(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_codec_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_codec_get_type();
+
+		public static /* libobject */ IntPtr CodecGetType()
+		{
+			/* Unable to process the return value of purple_media_codec_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_id
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_codec_get_id(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_codec_get_id(IntPtr codec);
+
+		public static uint CodecGetId(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_encoding_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_codec_get_encoding_name(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_codec_get_encoding_name(IntPtr codec);
+
+		public static string CodecGetEncodingName(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_clock_rate
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_codec_get_clock_rate(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_codec_get_clock_rate(IntPtr codec);
+
+		public static uint CodecGetClockRate(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_channels
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_codec_get_channels(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_codec_get_channels(IntPtr codec);
+
+		public static uint CodecGetChannels(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_optional_parameters
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_codec_get_optional_parameters(PurpleMediaCodec * codec)
+		 * 
+		 * Could not generate a wrapper for purple_media_codec_get_optional_parameters in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_codec_get_optional_parameters
+		 */
+
+		/*
+		 * Function Name: purple_media_codec_to_string
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_codec_to_string(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_codec_to_string(IntPtr codec);
+
+		public static string CodecToString(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_list_copy
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_codec_list_copy(GList * codecs)
+		 * 
+		 * Could not generate a wrapper for purple_media_codec_list_copy in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_codec_list_copy
+		 */
+
+		/*
+		 * Function Name: purple_media_codec_list_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_codec_list_free(GList * codecs)
+		 * 
+		 * Could not generate a wrapper for purple_media_codec_list_free in file "media.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_media_get_session_ids
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_get_session_ids(PurpleMedia * media)
+		 * 
+		 * Could not generate a wrapper for purple_media_get_session_ids in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_get_session_ids
+		 */
+
+		/*
+		 * Function Name: purple_media_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_media_get_account(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_account(IntPtr media);
+
+		public static PurpleAccount GetAccount(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_prpl_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_media_get_prpl_data(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_prpl_data(IntPtr media);
+
+		public static IntPtr GetPrplData(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_set_prpl_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_set_prpl_data(PurpleMedia * media, gpointer prpl_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_media_set_prpl_data(IntPtr media, IntPtr prpl_data);
+
+		public static void SetPrplData(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, IntPtr prpl_data)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_session_type
+		 * Function Type: PurpleMediaSessionType
+		 * Function RawType: PurpleMediaSessionType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleMediaSessionType purple_media_get_session_type(PurpleMedia * media, gchar * sess_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Media.PurpleMediaSessionType purple_media_get_session_type(IntPtr media, string sess_id);
+
+		public static Media.PurpleMediaSessionType GetSessionType(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string sess_id)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_manager
+		 * Function Type: _PurpleMediaManager *
+		 * Function RawType: _PurpleMediaManager
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * _PurpleMediaManager * purple_media_get_manager(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_manager(IntPtr media);
+
+		public static /* Resolved as PointerToUnknownStruct to _PurpleMediaManager */ IntPtr GetManager(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_codecs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_get_codecs(PurpleMedia * media, gchar * sess_id)
+		 * 
+		 * Could not generate a wrapper for purple_media_get_codecs in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_get_codecs
+		 */
+
+		/*
+		 * Function Name: purple_media_set_send_codec
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_media_set_send_codec(PurpleMedia * media, gchar * sess_id, PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_media_set_send_codec(IntPtr media, string sess_id, IntPtr codec);
+
+		public static bool SetSendCodec(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string sess_id, /* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codecs_ready
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_media_codecs_ready(PurpleMedia * media, gchar * sess_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_media_codecs_ready(IntPtr media, string sess_id);
+
+		public static bool CodecsReady(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string sess_id)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_set_input_volume
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_set_input_volume(PurpleMedia * media, gchar * session_id, double level)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_media_set_input_volume(IntPtr media, string session_id, double level);
+
+		public static void SetInputVolume(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string session_id, double level)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_remove_output_windows
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_remove_output_windows(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_media_remove_output_windows(IntPtr media);
+
+		public static void RemoveOutputWindows(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Mediamanager.cs	58d745ef6803366c1659314f7bacbf40aff321d9
+++ libpurple/wrapper/Mediamanager.cs	58d745ef6803366c1659314f7bacbf40aff321d9
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: mediamanager.h
+	 */
+	public class Mediamanager
+	{
+
+		/*
+		 * Function Name: purple_media_manager_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_manager_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_manager_get_type();
+
+		public static /* libobject */ IntPtr MediaManagerGetType()
+		{
+			/* Unable to process the return value of purple_media_manager_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_manager_get
+		 * Function Type: PurpleMediaManager *
+		 * Function RawType: PurpleMediaManager
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMediaManager * purple_media_manager_get()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_manager_get();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMediaManager */ IntPtr MediaManagerGet()
+		{
+			/* Unable to process the return value of purple_media_manager_get, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_manager_get_media
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_manager_get_media(PurpleMediaManager * manager)
+		 * 
+		 * Could not generate a wrapper for purple_media_manager_get_media in file "mediamanager.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_manager_get_media
+		 */
+
+		/*
+		 * Function Name: purple_media_manager_get_ui_caps
+		 * Function Type: PurpleMediaCaps
+		 * Function RawType: PurpleMediaCaps
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleMediaCaps purple_media_manager_get_ui_caps(PurpleMediaManager * manager)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Media.PurpleMediaCaps purple_media_manager_get_ui_caps(IntPtr manager);
+
+		public static Media.PurpleMediaCaps MediaManagerGetUiCaps(/* Resolved as PointerToUnknownStruct to PurpleMediaManager */ IntPtr manager)
+		{
+			/* Unable to process manager, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Mime.cs	9dbdac00089900ff6956253fa7391cf0cb3c7abb
+++ libpurple/wrapper/Mime.cs	9dbdac00089900ff6956253fa7391cf0cb3c7abb
@@ -0,0 +1,252 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: mime.h
+	 */
+	public class Mime
+	{
+
+		/*
+		 * Function Name: purple_mime_document_new
+		 * Function Type: PurpleMimeDocument *
+		 * Function RawType: PurpleMimeDocument
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimeDocument * purple_mime_document_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_document_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr DocumentNew()
+		{
+			/* Unable to process the return value of purple_mime_document_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_mime_document_free(PurpleMimeDocument * doc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_mime_document_free(IntPtr doc);
+
+		public static void DocumentFree(/* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr doc)
+		{
+			/* Unable to process doc, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_parse
+		 * Function Type: PurpleMimeDocument *
+		 * Function RawType: PurpleMimeDocument
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimeDocument * purple_mime_document_parse(char * buf)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_document_parse(string buf);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr DocumentParse(string buf)
+		{
+			/* Unable to process the return value of purple_mime_document_parse, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_parsen
+		 * Function Type: PurpleMimeDocument *
+		 * Function RawType: PurpleMimeDocument
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimeDocument * purple_mime_document_parsen(char * buf, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_document_parsen(string buf, ulong len);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr DocumentParsen(string buf, ulong len)
+		{
+			/* Unable to process the return value of purple_mime_document_parsen, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_write
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_mime_document_write(PurpleMimeDocument * doc, GString * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_mime_document_write(IntPtr doc, IntPtr str);
+
+		public static void DocumentWrite(/* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr doc, /* Resolved as PointerToUnknownStruct to GString */ IntPtr str)
+		{
+			/* Unable to process doc, a PointerToUnknownStruct. */
+			/* Unable to process str, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_mime_document_get_fields(PurpleMimeDocument * doc)
+		 * 
+		 * Could not generate a wrapper for purple_mime_document_get_fields in file "mime.h".
+		 * Message: Unknown inner-type of argument 0 of purple_mime_document_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_mime_document_get_parts
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_mime_document_get_parts(PurpleMimeDocument * doc)
+		 * 
+		 * Could not generate a wrapper for purple_mime_document_get_parts in file "mime.h".
+		 * Message: Unknown inner-type of argument 0 of purple_mime_document_get_parts
+		 */
+
+		/*
+		 * Function Name: purple_mime_part_new
+		 * Function Type: PurpleMimePart *
+		 * Function RawType: PurpleMimePart
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimePart * purple_mime_part_new(PurpleMimeDocument * doc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_part_new(IntPtr doc);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr PartNew(/* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr doc)
+		{
+			/* Unable to process doc, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_part_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_mime_part_get_fields(PurpleMimePart * part)
+		 * 
+		 * Could not generate a wrapper for purple_mime_part_get_fields in file "mime.h".
+		 * Message: Unknown inner-type of argument 0 of purple_mime_part_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_mime_part_get_data
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_mime_part_get_data(PurpleMimePart * part)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_mime_part_get_data(IntPtr part);
+
+		public static string PartGetData(/* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr part)
+		{
+			/* Unable to process part, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_part_get_length
+		 * Function Type: gsize
+		 * Function RawType: gsize
+		 * Function Category: Native
+		 */
+		/*
+		 * gsize purple_mime_part_get_length(PurpleMimePart * part)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_mime_part_get_length(IntPtr part);
+
+		public static ulong PartGetLength(/* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr part)
+		{
+			/* Unable to process part, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_part_set_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_mime_part_set_data(PurpleMimePart * part, char * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_mime_part_set_data(IntPtr part, string data);
+
+		public static void PartSetData(/* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr part, string data)
+		{
+			/* Unable to process part, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/NatPmp.cs	8ecb9d8aab5844631a6efb8dc1a350deb06df638
+++ libpurple/wrapper/NatPmp.cs	8ecb9d8aab5844631a6efb8dc1a350deb06df638
@@ -0,0 +1,126 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: nat-pmp.h
+	 */
+	public class NatPmp
+	{
+		public enum PurplePmpType
+		{
+			PURPLE_PMP_TYPE_UDP,
+			PURPLE_PMP_TYPE_TCP
+		};
+
+
+		/*
+		 * Function Name: purple_pmp_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pmp_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pmp_init();
+
+		public static void PmpInit()
+		{
+			purple_pmp_init();
+		}
+
+		/*
+		 * Function Name: purple_pmp_get_public_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_pmp_get_public_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_pmp_get_public_ip();
+
+		public static string PmpGetPublicIp()
+		{
+			return purple_pmp_get_public_ip();
+		}
+
+		/*
+		 * Function Name: purple_pmp_create_map
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pmp_create_map(PurplePmpType type, unsigned short privateport, unsigned short publicport, int lifetime)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pmp_create_map(NatPmp.PurplePmpType type, ushort privateport, ushort publicport, int lifetime);
+
+		public static bool PmpCreateMap(NatPmp.PurplePmpType type, ushort privateport, ushort publicport, int lifetime)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pmp_destroy_map
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pmp_destroy_map(PurplePmpType type, unsigned short privateport)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pmp_destroy_map(NatPmp.PurplePmpType type, ushort privateport);
+
+		public static bool PmpDestroyMap(NatPmp.PurplePmpType type, ushort privateport)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Network.cs	e96e4510c256c7da81898dce9955873cc7be40d9
+++ libpurple/wrapper/Network.cs	e96e4510c256c7da81898dce9955873cc7be40d9
@@ -0,0 +1,342 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: network.h
+	 */
+	public class Network
+	{
+		public delegate void PurpleNetworkListenCallback(int listenfd, IntPtr data);
+
+		/*
+		 * Function Name: purple_network_ip_atoi
+		 * Function Type: unsigned char *
+		 * Function RawType: char
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * unsigned char * purple_network_ip_atoi(char * ip)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_network_ip_atoi(string ip);
+
+		public static /* Resolved as PointerToUnknownStruct to char */ IntPtr IpAtoi(string ip)
+		{
+			/* Unable to process the return value of purple_network_ip_atoi, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_network_set_public_ip
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_set_public_ip(char * ip)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_set_public_ip(string ip);
+
+		public static void SetPublicIp(string ip)
+		{
+			purple_network_set_public_ip(ip);
+		}
+
+		/*
+		 * Function Name: purple_network_get_public_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_network_get_public_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_public_ip();
+
+		public static string GetPublicIp()
+		{
+			return purple_network_get_public_ip();
+		}
+
+		/*
+		 * Function Name: purple_network_get_local_system_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_network_get_local_system_ip(int fd)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_local_system_ip(int fd);
+
+		public static string GetLocalSystemIp(int fd)
+		{
+			return purple_network_get_local_system_ip(fd);
+		}
+
+		/*
+		 * Function Name: purple_network_get_my_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_network_get_my_ip(int fd)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_my_ip(int fd);
+
+		public static string GetMyIp(int fd)
+		{
+			return purple_network_get_my_ip(fd);
+		}
+
+		/*
+		 * Function Name: purple_network_listen_map_external
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_listen_map_external(gboolean map_external)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_listen_map_external(bool map_external);
+
+		public static void ListenMapExternal(bool map_external)
+		{
+			purple_network_listen_map_external(map_external);
+		}
+
+		/*
+		 * Function Name: purple_network_listen_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_listen_cancel(PurpleNetworkListenData * listen_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_listen_cancel(IntPtr listen_data);
+
+		public static void ListenCancel(/* Resolved as PointerToUnknownStruct to PurpleNetworkListenData */ IntPtr listen_data)
+		{
+			/* Unable to process listen_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_network_get_port_from_fd
+		 * Function Type: unsigned short
+		 * Function RawType: short
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned short purple_network_get_port_from_fd(int fd)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_network_get_port_from_fd(int fd);
+
+		public static ushort GetPortFromFd(int fd)
+		{
+			return purple_network_get_port_from_fd(fd);
+		}
+
+		/*
+		 * Function Name: purple_network_is_available
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_network_is_available()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_network_is_available();
+
+		public static bool IsAvailable()
+		{
+			return purple_network_is_available();
+		}
+
+		/*
+		 * Function Name: purple_network_force_online
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_force_online()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_force_online();
+
+		public static void ForceOnline()
+		{
+			purple_network_force_online();
+		}
+
+		/*
+		 * Function Name: purple_network_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_network_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_network_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_network_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_network_set_stun_server
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_set_stun_server(gchar * stun_server)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_set_stun_server(string stun_server);
+
+		public static void SetStunServer(string stun_server)
+		{
+			purple_network_set_stun_server(stun_server);
+		}
+
+		/*
+		 * Function Name: purple_network_get_stun_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_network_get_stun_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_stun_ip();
+
+		public static string GetStunIp()
+		{
+			return purple_network_get_stun_ip();
+		}
+
+		/*
+		 * Function Name: purple_network_set_turn_server
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_set_turn_server(gchar * stun_server)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_set_turn_server(string stun_server);
+
+		public static void SetTurnServer(string stun_server)
+		{
+			purple_network_set_turn_server(stun_server);
+		}
+
+		/*
+		 * Function Name: purple_network_get_turn_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_network_get_turn_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_turn_ip();
+
+		public static string GetTurnIp()
+		{
+			return purple_network_get_turn_ip();
+		}
+
+		/*
+		 * Function Name: purple_network_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_init();
+
+		public static void Init()
+		{
+			purple_network_init();
+		}
+
+		/*
+		 * Function Name: purple_network_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_uninit();
+
+		public static void Uninit()
+		{
+			purple_network_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Notify.cs	4e34f37ea4a1ee2f6e120e3d1599498214523d89
+++ libpurple/wrapper/Notify.cs	4e34f37ea4a1ee2f6e120e3d1599498214523d89
@@ -0,0 +1,637 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: notify.h
+	 */
+	public class Notify
+	{
+		public enum PurpleNotifyType
+		{
+			PURPLE_NOTIFY_MESSAGE = 0,
+			PURPLE_NOTIFY_EMAIL,
+			PURPLE_NOTIFY_EMAILS,
+			PURPLE_NOTIFY_FORMATTED,
+			PURPLE_NOTIFY_SEARCHRESULTS,
+			PURPLE_NOTIFY_USERINFO,
+			PURPLE_NOTIFY_URI
+		};
+
+		public enum PurpleNotifyMsgType
+		{
+			PURPLE_NOTIFY_MSG_ERROR = 0,
+			PURPLE_NOTIFY_MSG_WARNING,
+			PURPLE_NOTIFY_MSG_INFO
+		};
+
+		public enum PurpleNotifySearchButtonType
+		{
+			PURPLE_NOTIFY_BUTTON_LABELED = 0,
+			PURPLE_NOTIFY_BUTTON_CONTINUE = 1,
+			PURPLE_NOTIFY_BUTTON_ADD,
+			PURPLE_NOTIFY_BUTTON_INFO,
+			PURPLE_NOTIFY_BUTTON_IM,
+			PURPLE_NOTIFY_BUTTON_JOIN,
+			PURPLE_NOTIFY_BUTTON_INVITE
+		};
+
+		public enum PurpleNotifyUserInfoEntryType
+		{
+			PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR = 0,
+			PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK,
+			PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER
+		};
+
+		public delegate void PurpleNotifyCloseCallback(IntPtr user_data);
+		public delegate void PurpleNotifySearchResultsCallback(IntPtr c, IntPtr row, IntPtr user_data);
+
+		/*
+		 * Function Name: purple_notify_searchresults_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_searchresults_free(PurpleNotifySearchResults * results)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_searchresults_free(IntPtr results);
+
+		public static void SearchresultsFree(/* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr results)
+		{
+			/* Unable to process results, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_new
+		 * Function Type: PurpleNotifySearchResults *
+		 * Function RawType: PurpleNotifySearchResults
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifySearchResults * purple_notify_searchresults_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_searchresults_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr SearchresultsNew()
+		{
+			/* Unable to process the return value of purple_notify_searchresults_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_column_new
+		 * Function Type: PurpleNotifySearchColumn *
+		 * Function RawType: PurpleNotifySearchColumn
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifySearchColumn * purple_notify_searchresults_column_new(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_searchresults_column_new(string title);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifySearchColumn */ IntPtr SearchresultsColumnNew(string title)
+		{
+			/* Unable to process the return value of purple_notify_searchresults_column_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_get_rows_count
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_notify_searchresults_get_rows_count(PurpleNotifySearchResults * results)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_notify_searchresults_get_rows_count(IntPtr results);
+
+		public static uint SearchresultsGetRowsCount(/* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr results)
+		{
+			/* Unable to process results, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_get_columns_count
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_notify_searchresults_get_columns_count(PurpleNotifySearchResults * results)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_notify_searchresults_get_columns_count(IntPtr results);
+
+		public static uint SearchresultsGetColumnsCount(/* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr results)
+		{
+			/* Unable to process results, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_new
+		 * Function Type: PurpleNotifyUserInfo *
+		 * Function RawType: PurpleNotifyUserInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifyUserInfo * purple_notify_user_info_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_user_info_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr UserInfoNew()
+		{
+			/* Unable to process the return value of purple_notify_user_info_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_destroy(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_destroy(IntPtr user_info);
+
+		public static void UserInfoDestroy(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_get_entries
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_notify_user_info_get_entries(PurpleNotifyUserInfo * user_info)
+		 * 
+		 * Could not generate a wrapper for purple_notify_user_info_get_entries in file "notify.h".
+		 * Message: Unknown inner-type of argument 0 of purple_notify_user_info_get_entries
+		 */
+
+		/*
+		 * Function Name: purple_notify_user_info_get_text_with_newline
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo * user_info, char * newline)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_notify_user_info_get_text_with_newline(IntPtr user_info, string newline);
+
+		public static string UserInfoGetTextWithNewline(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string newline)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_add_pair
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_add_pair(PurpleNotifyUserInfo * user_info, char * label, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_add_pair(IntPtr user_info, string label, string value);
+
+		public static void UserInfoAddPair(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label, string value)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_prepend_pair
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_prepend_pair(PurpleNotifyUserInfo * user_info, char * label, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_prepend_pair(IntPtr user_info, string label, string value);
+
+		public static void UserInfoPrependPair(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label, string value)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_remove_entry
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_remove_entry(PurpleNotifyUserInfo * user_info, PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_remove_entry(IntPtr user_info, IntPtr user_info_entry);
+
+		public static void UserInfoRemoveEntry(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, /* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_new
+		 * Function Type: PurpleNotifyUserInfoEntry *
+		 * Function RawType: PurpleNotifyUserInfoEntry
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifyUserInfoEntry * purple_notify_user_info_entry_new(char * label, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_user_info_entry_new(string label, string value);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr UserInfoEntryNew(string label, string value)
+		{
+			/* Unable to process the return value of purple_notify_user_info_entry_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_add_section_break
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_add_section_break(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_add_section_break(IntPtr user_info);
+
+		public static void UserInfoAddSectionBreak(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_prepend_section_break
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_prepend_section_break(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_prepend_section_break(IntPtr user_info);
+
+		public static void UserInfoPrependSectionBreak(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_add_section_header
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_add_section_header(PurpleNotifyUserInfo * user_info, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_add_section_header(IntPtr user_info, string label);
+
+		public static void UserInfoAddSectionHeader(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_prepend_section_header
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_prepend_section_header(PurpleNotifyUserInfo * user_info, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_prepend_section_header(IntPtr user_info, string label);
+
+		public static void UserInfoPrependSectionHeader(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_remove_last_item
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_remove_last_item(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_remove_last_item(IntPtr user_info);
+
+		public static void UserInfoRemoveLastItem(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_get_label
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_notify_user_info_entry_get_label(PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_notify_user_info_entry_get_label(IntPtr user_info_entry);
+
+		public static string UserInfoEntryGetLabel(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_set_label
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_entry_set_label(PurpleNotifyUserInfoEntry * user_info_entry, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_entry_set_label(IntPtr user_info_entry, string label);
+
+		public static void UserInfoEntrySetLabel(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry, string label)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_get_value
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_notify_user_info_entry_get_value(PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_notify_user_info_entry_get_value(IntPtr user_info_entry);
+
+		public static string UserInfoEntryGetValue(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_set_value
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_entry_set_value(PurpleNotifyUserInfoEntry * user_info_entry, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_entry_set_value(IntPtr user_info_entry, string value);
+
+		public static void UserInfoEntrySetValue(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry, string value)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_get_type
+		 * Function Type: PurpleNotifyUserInfoEntryType
+		 * Function RawType: PurpleNotifyUserInfoEntryType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_type(PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Notify.PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_type(IntPtr user_info_entry);
+
+		public static Notify.PurpleNotifyUserInfoEntryType UserInfoEntryGetType(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_uri
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_notify_uri(void * handle, char * uri)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_uri(IntPtr handle, string uri);
+
+		public static IntPtr Uri(IntPtr handle, string uri)
+		{
+			return purple_notify_uri(handle, uri);
+		}
+
+		/*
+		 * Function Name: purple_notify_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_close(PurpleNotifyType type, void * ui_handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_close(Notify.PurpleNotifyType type, IntPtr ui_handle);
+
+		public static void Close(Notify.PurpleNotifyType type, IntPtr ui_handle)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_close_with_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_close_with_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_close_with_handle(IntPtr handle);
+
+		public static void CloseWithHandle(IntPtr handle)
+		{
+			purple_notify_close_with_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_notify_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_set_ui_ops(PurpleNotifyUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleNotifyUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_get_ui_ops
+		 * Function Type: PurpleNotifyUiOps *
+		 * Function RawType: PurpleNotifyUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifyUiOps * purple_notify_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifyUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_notify_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_notify_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_notify_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_notify_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_init();
+
+		public static void Init()
+		{
+			purple_notify_init();
+		}
+
+		/*
+		 * Function Name: purple_notify_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_uninit();
+
+		public static void Uninit()
+		{
+			purple_notify_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Ntlm.cs	02f49dd64a31f8e8fb54178ce63870c729437d59
+++ libpurple/wrapper/Ntlm.cs	02f49dd64a31f8e8fb54178ce63870c729437d59
@@ -0,0 +1,104 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: ntlm.h
+	 */
+	public class Ntlm
+	{
+
+		/*
+		 * Function Name: purple_ntlm_gen_type1
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_ntlm_gen_type1(gchar * hostname, gchar * domain)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_ntlm_gen_type1(string hostname, string domain);
+
+		public static string GenType1(string hostname, string domain)
+		{
+			return purple_ntlm_gen_type1(hostname, domain);
+		}
+
+		/*
+		 * Function Name: purple_ntlm_parse_type2
+		 * Function Type: guint8 *
+		 * Function RawType: guint8
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * guint8 * purple_ntlm_parse_type2(gchar * type2, guint32 * flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ntlm_parse_type2(string type2, IntPtr flags);
+
+		public static /* Resolved as PointerToUnknownStruct to guint8 */ IntPtr ParseType2(string type2, /* Resolved as PointerToUnknownStruct to guint32 */ IntPtr flags)
+		{
+			/* Unable to process flags, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ntlm_gen_type3
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_ntlm_gen_type3(gchar * username, gchar * passw, gchar * hostname, gchar * domain, guint8 * nonce, guint32 * flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_ntlm_gen_type3(string username, string passw, string hostname, string domain, IntPtr nonce, IntPtr flags);
+
+		public static string GenType3(string username, string passw, string hostname, string domain, /* Resolved as PointerToUnknownStruct to guint8 */ IntPtr nonce, /* Resolved as PointerToUnknownStruct to guint32 */ IntPtr flags)
+		{
+			/* Unable to process nonce, a PointerToUnknownStruct. */
+			/* Unable to process flags, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Plugin.cs	5abaf8e5ee28dd52224dab281ad576533bd3ad0e
+++ libpurple/wrapper/Plugin.cs	5abaf8e5ee28dd52224dab281ad576533bd3ad0e
@@ -0,0 +1,693 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 */
+	public class Plugin
+	{
+		public enum PurplePluginType
+		{
+			PURPLE_PLUGIN_UNKNOWN = -1,
+			PURPLE_PLUGIN_STANDARD = 0,
+			PURPLE_PLUGIN_LOADER,
+			PURPLE_PLUGIN_PROTOCOL
+		};
+
+
+		/*
+		 * Function Name: purple_plugin_new
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugin_new(gboolean native, char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_new(bool native, string path);
+
+		public static PurplePlugin New(bool native, string path)
+		{
+			return new PurplePlugin(purple_plugin_new(native, path));
+		}
+
+		/*
+		 * Function Name: purple_plugin_probe
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugin_probe(char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_probe(string filename);
+
+		public static PurplePlugin Probe(string filename)
+		{
+			return new PurplePlugin(purple_plugin_probe(filename));
+		}
+
+		/*
+		 * Function Name: purple_plugin_register
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_register(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_register(IntPtr plugin);
+
+		public static bool Register(PurplePlugin plugin)
+		{
+			return purple_plugin_register(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_load
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_load(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_load(IntPtr plugin);
+
+		public static bool Load(PurplePlugin plugin)
+		{
+			return purple_plugin_load(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_unload
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_unload(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_unload(IntPtr plugin);
+
+		public static bool Unload(PurplePlugin plugin)
+		{
+			return purple_plugin_unload(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_disable
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_disable(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_disable(IntPtr plugin);
+
+		public static void Disable(PurplePlugin plugin)
+		{
+			purple_plugin_disable(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_reload
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_reload(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_reload(IntPtr plugin);
+
+		public static bool Reload(PurplePlugin plugin)
+		{
+			return purple_plugin_reload(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_destroy(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_destroy(IntPtr plugin);
+
+		public static void Destroy(PurplePlugin plugin)
+		{
+			purple_plugin_destroy(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_is_loaded
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_is_loaded(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_is_loaded(IntPtr plugin);
+
+		public static bool IsLoaded(PurplePlugin plugin)
+		{
+			return purple_plugin_is_loaded(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_is_unloadable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_is_unloadable(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_is_unloadable(IntPtr plugin);
+
+		public static bool IsUnloadable(PurplePlugin plugin)
+		{
+			return purple_plugin_is_unloadable(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_id
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_id(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_id(IntPtr plugin);
+
+		public static string GetId(PurplePlugin plugin)
+		{
+			return purple_plugin_get_id(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_name(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_name(IntPtr plugin);
+
+		public static string GetName(PurplePlugin plugin)
+		{
+			return purple_plugin_get_name(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_version
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_version(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_version(IntPtr plugin);
+
+		public static string GetVersion(PurplePlugin plugin)
+		{
+			return purple_plugin_get_version(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_summary
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_summary(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_summary(IntPtr plugin);
+
+		public static string GetSummary(PurplePlugin plugin)
+		{
+			return purple_plugin_get_summary(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_description
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_description(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_description(IntPtr plugin);
+
+		public static string GetDescription(PurplePlugin plugin)
+		{
+			return purple_plugin_get_description(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_author
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_author(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_author(IntPtr plugin);
+
+		public static string GetAuthor(PurplePlugin plugin)
+		{
+			return purple_plugin_get_author(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_homepage
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_homepage(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_homepage(IntPtr plugin);
+
+		public static string GetHomepage(PurplePlugin plugin)
+		{
+			return purple_plugin_get_homepage(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_ipc_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_ipc_unregister(PurplePlugin * plugin, char * command)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_ipc_unregister(IntPtr plugin, string command);
+
+		public static void IpcUnregister(PurplePlugin plugin, string command)
+		{
+			purple_plugin_ipc_unregister(plugin.Reference, command);
+		}
+
+		/*
+		 * Function Name: purple_plugin_ipc_unregister_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_ipc_unregister_all(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_ipc_unregister_all(IntPtr plugin);
+
+		public static void IpcUnregisterAll(PurplePlugin plugin)
+		{
+			purple_plugin_ipc_unregister_all(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugins_add_search_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_add_search_path(char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_add_search_path(string path);
+
+		public static void PluginsAddSearchPath(string path)
+		{
+			purple_plugins_add_search_path(path);
+		}
+
+		/*
+		 * Function Name: purple_plugins_unload_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_unload_all()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_unload_all();
+
+		public static void PluginsUnloadAll()
+		{
+			purple_plugins_unload_all();
+		}
+
+		/*
+		 * Function Name: purple_plugins_unload
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_unload(PurplePluginType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_unload(Plugin.PurplePluginType type);
+
+		public static void PluginsUnload(Plugin.PurplePluginType type)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugins_destroy_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_destroy_all()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_destroy_all();
+
+		public static void PluginsDestroyAll()
+		{
+			purple_plugins_destroy_all();
+		}
+
+		/*
+		 * Function Name: purple_plugins_save_loaded
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_save_loaded(char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_save_loaded(string key);
+
+		public static void PluginsSaveLoaded(string key)
+		{
+			purple_plugins_save_loaded(key);
+		}
+
+		/*
+		 * Function Name: purple_plugins_load_saved
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_load_saved(char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_load_saved(string key);
+
+		public static void PluginsLoadSaved(string key)
+		{
+			purple_plugins_load_saved(key);
+		}
+
+		/*
+		 * Function Name: purple_plugins_probe
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_probe(char * ext)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_probe(string ext);
+
+		public static void PluginsProbe(string ext)
+		{
+			purple_plugins_probe(ext);
+		}
+
+		/*
+		 * Function Name: purple_plugins_enabled
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugins_enabled()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugins_enabled();
+
+		public static bool PluginsEnabled()
+		{
+			return purple_plugins_enabled();
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_name
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_name(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_name(string name);
+
+		public static PurplePlugin PluginsFindWithName(string name)
+		{
+			return new PurplePlugin(purple_plugins_find_with_name(name));
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_filename
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_filename(char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_filename(string filename);
+
+		public static PurplePlugin PluginsFindWithFilename(string filename)
+		{
+			return new PurplePlugin(purple_plugins_find_with_filename(filename));
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_basename
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_basename(char * basename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_basename(string basename);
+
+		public static PurplePlugin PluginsFindWithBasename(string basename)
+		{
+			return new PurplePlugin(purple_plugins_find_with_basename(basename));
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_id
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_id(char * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_id(string id);
+
+		public static PurplePlugin PluginsFindWithId(string id)
+		{
+			return new PurplePlugin(purple_plugins_find_with_id(id));
+		}
+
+		/*
+		 * Function Name: purple_plugins_get_loaded
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugins_get_loaded()
+		 * 
+		 * Could not generate a wrapper for purple_plugins_get_loaded in file "plugin.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugins_get_loaded
+		 */
+
+		/*
+		 * Function Name: purple_plugins_get_protocols
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugins_get_protocols()
+		 * 
+		 * Could not generate a wrapper for purple_plugins_get_protocols in file "plugin.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugins_get_protocols
+		 */
+
+		/*
+		 * Function Name: purple_plugins_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugins_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_plugins_get_all in file "plugin.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugins_get_all
+		 */
+
+		/*
+		 * Function Name: purple_plugins_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_plugins_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_get_handle();
+
+		public static IntPtr PluginsGetHandle()
+		{
+			return purple_plugins_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_plugins_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_init();
+
+		public static void PluginsInit()
+		{
+			purple_plugins_init();
+		}
+
+		/*
+		 * Function Name: purple_plugins_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_uninit();
+
+		public static void PluginsUninit()
+		{
+			purple_plugins_uninit();
+		}
+
+		/*
+		 * Function Name: purple_plugin_action_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_action_free(PurplePluginAction * action)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_action_free(IntPtr action);
+
+		public static void ActionFree(PurplePluginAction action)
+		{
+			purple_plugin_action_free(action.Reference);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Pluginpref.cs	bf094f8b8f0d6b6c9c2c595f2286e05dbc01d153
+++ libpurple/wrapper/Pluginpref.cs	bf094f8b8f0d6b6c9c2c595f2286e05dbc01d153
@@ -0,0 +1,510 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: pluginpref.h
+	 */
+	public class Pluginpref
+	{
+		public enum PurpleStringFormatType
+		{
+			PURPLE_STRING_FORMAT_TYPE_NONE = 0,
+			PURPLE_STRING_FORMAT_TYPE_MULTILINE = 1 << 0,
+			PURPLE_STRING_FORMAT_TYPE_HTML = 1 << 1
+		};
+
+		public enum PurplePluginPrefType
+		{
+			PURPLE_PLUGIN_PREF_NONE,
+			PURPLE_PLUGIN_PREF_CHOICE,
+			PURPLE_PLUGIN_PREF_INFO,
+			PURPLE_PLUGIN_PREF_STRING_FORMAT
+		};
+
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_new
+		 * Function Type: PurplePluginPrefFrame *
+		 * Function RawType: PurplePluginPrefFrame
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPrefFrame * purple_plugin_pref_frame_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_frame_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr PluginPrefFrameNew()
+		{
+			/* Unable to process the return value of purple_plugin_pref_frame_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_frame_destroy(PurplePluginPrefFrame * frame)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_frame_destroy(IntPtr frame);
+
+		public static void PluginPrefFrameDestroy(/* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr frame)
+		{
+			/* Unable to process frame, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_frame_add(PurplePluginPrefFrame * frame, PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_frame_add(IntPtr frame, IntPtr pref);
+
+		public static void PluginPrefFrameAdd(/* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr frame, /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process frame, a PointerToUnknownStruct. */
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_get_prefs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugin_pref_frame_get_prefs(PurplePluginPrefFrame * frame)
+		 * 
+		 * Could not generate a wrapper for purple_plugin_pref_frame_get_prefs in file "pluginpref.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugin_pref_frame_get_prefs
+		 */
+
+		/*
+		 * Function Name: purple_plugin_pref_new
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNew()
+		{
+			/* Unable to process the return value of purple_plugin_pref_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_new_with_name
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new_with_name(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new_with_name(string name);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNewWithName(string name)
+		{
+			/* Unable to process the return value of purple_plugin_pref_new_with_name, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_new_with_label
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new_with_label(char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new_with_label(string label);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNewWithLabel(string label)
+		{
+			/* Unable to process the return value of purple_plugin_pref_new_with_label, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_new_with_name_and_label
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new_with_name_and_label(char * name, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new_with_name_and_label(string name, string label);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNewWithNameAndLabel(string name, string label)
+		{
+			/* Unable to process the return value of purple_plugin_pref_new_with_name_and_label, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_destroy(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_destroy(IntPtr pref);
+
+		public static void PluginPrefDestroy(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_name(PurplePluginPref * pref, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_name(IntPtr pref, string name);
+
+		public static void PluginPrefSetName(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, string name)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_plugin_pref_get_name(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_pref_get_name(IntPtr pref);
+
+		public static string PluginPrefGetName(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_label
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_label(PurplePluginPref * pref, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_label(IntPtr pref, string label);
+
+		public static void PluginPrefSetLabel(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, string label)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_label
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_plugin_pref_get_label(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_pref_get_label(IntPtr pref);
+
+		public static string PluginPrefGetLabel(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_bounds
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_bounds(PurplePluginPref * pref, int min, int max)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_bounds(IntPtr pref, int min, int max);
+
+		public static void PluginPrefSetBounds(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, int min, int max)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_bounds
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_get_bounds(PurplePluginPref * pref, int * min, int * max)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_get_bounds(IntPtr pref, IntPtr min, IntPtr max);
+
+		public static void PluginPrefGetBounds(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, /* Resolved as PointerToUnknownStruct to int */ IntPtr min, /* Resolved as PointerToUnknownStruct to int */ IntPtr max)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			/* Unable to process min, a PointerToUnknownStruct. */
+			/* Unable to process max, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_type(PurplePluginPref * pref, PurplePluginPrefType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_type(IntPtr pref, Pluginpref.PurplePluginPrefType type);
+
+		public static void PluginPrefSetType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, Pluginpref.PurplePluginPrefType type)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_type
+		 * Function Type: PurplePluginPrefType
+		 * Function RawType: PurplePluginPrefType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePluginPrefType purple_plugin_pref_get_type(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pluginpref.PurplePluginPrefType purple_plugin_pref_get_type(IntPtr pref);
+
+		public static Pluginpref.PurplePluginPrefType PluginPrefGetType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_add_choice
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_add_choice(PurplePluginPref * pref, char * label, gpointer choice)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_add_choice(IntPtr pref, string label, IntPtr choice);
+
+		public static void PluginPrefAddChoice(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, string label, IntPtr choice)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_choices
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugin_pref_get_choices(PurplePluginPref * pref)
+		 * 
+		 * Could not generate a wrapper for purple_plugin_pref_get_choices in file "pluginpref.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugin_pref_get_choices
+		 */
+
+		/*
+		 * Function Name: purple_plugin_pref_set_max_length
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_max_length(PurplePluginPref * pref, unsigned int max_length)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_max_length(IntPtr pref, uint max_length);
+
+		public static void PluginPrefSetMaxLength(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, uint max_length)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_max_length
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_plugin_pref_get_max_length(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_plugin_pref_get_max_length(IntPtr pref);
+
+		public static uint PluginPrefGetMaxLength(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_masked
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_masked(PurplePluginPref * pref, gboolean mask)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_masked(IntPtr pref, bool mask);
+
+		public static void PluginPrefSetMasked(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, bool mask)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_masked
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_pref_get_masked(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_pref_get_masked(IntPtr pref);
+
+		public static bool PluginPrefGetMasked(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_format_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_format_type(PurplePluginPref * pref, PurpleStringFormatType format)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_format_type(IntPtr pref, Pluginpref.PurpleStringFormatType format);
+
+		public static void PluginPrefSetFormatType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, Pluginpref.PurpleStringFormatType format)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			/* Unable to process format, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_format_type
+		 * Function Type: PurpleStringFormatType
+		 * Function RawType: PurpleStringFormatType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleStringFormatType purple_plugin_pref_get_format_type(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pluginpref.PurpleStringFormatType purple_plugin_pref_get_format_type(IntPtr pref);
+
+		public static Pluginpref.PurpleStringFormatType PluginPrefGetFormatType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Pounce.cs	e4677ab150180a479dfcd762365121e671f8657e
+++ libpurple/wrapper/Pounce.cs	e4677ab150180a479dfcd762365121e671f8657e
@@ -0,0 +1,442 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: pounce.h
+	 */
+	public class Pounce
+	{
+		public enum PurplePounceEvent
+		{
+			PURPLE_POUNCE_NONE = 0x000,
+			PURPLE_POUNCE_SIGNON = 0x001,
+			PURPLE_POUNCE_SIGNOFF = 0x002,
+			PURPLE_POUNCE_AWAY = 0x004,
+			PURPLE_POUNCE_AWAY_RETURN = 0x008,
+			PURPLE_POUNCE_IDLE = 0x010,
+			PURPLE_POUNCE_IDLE_RETURN = 0x020,
+			PURPLE_POUNCE_TYPING = 0x040,
+			PURPLE_POUNCE_TYPED = 0x080,
+			PURPLE_POUNCE_TYPING_STOPPED = 0x100,
+			PURPLE_POUNCE_MESSAGE_RECEIVED = 0x200
+		};
+
+		public enum PurplePounceOption
+		{
+			PURPLE_POUNCE_OPTION_NONE = 0x00,
+			PURPLE_POUNCE_OPTION_AWAY = 0x01
+		};
+
+		public delegate void PurplePounceCb(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, IntPtr _PurpleWrapper_arg2);
+
+		/*
+		 * Function Name: purple_pounce_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_destroy(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_destroy(IntPtr pounce);
+
+		public static void Destroy(PurplePounce pounce)
+		{
+			purple_pounce_destroy(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_destroy_all_by_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_destroy_all_by_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_destroy_all_by_account(IntPtr account);
+
+		public static void DestroyAllByAccount(PurpleAccount account)
+		{
+			purple_pounce_destroy_all_by_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_events
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_events(PurplePounce * pounce, PurplePounceEvent events)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_events(IntPtr pounce, Pounce.PurplePounceEvent events);
+
+		public static void SetEvents(PurplePounce pounce, Pounce.PurplePounceEvent events)
+		{
+			/* Unable to process events, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_options
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_options(PurplePounce * pounce, PurplePounceOption options)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_options(IntPtr pounce, Pounce.PurplePounceOption options);
+
+		public static void SetOptions(PurplePounce pounce, Pounce.PurplePounceOption options)
+		{
+			/* Unable to process options, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_pouncer
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_pouncer(PurplePounce * pounce, PurpleAccount * pouncer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_pouncer(IntPtr pounce, IntPtr pouncer);
+
+		public static void SetPouncer(PurplePounce pounce, PurpleAccount pouncer)
+		{
+			purple_pounce_set_pouncer(pounce.Reference, pouncer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_pouncee
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_pouncee(PurplePounce * pounce, char * pouncee)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_pouncee(IntPtr pounce, string pouncee);
+
+		public static void SetPouncee(PurplePounce pounce, string pouncee)
+		{
+			purple_pounce_set_pouncee(pounce.Reference, pouncee);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_save
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_save(PurplePounce * pounce, gboolean save)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_save(IntPtr pounce, bool save);
+
+		public static void SetSave(PurplePounce pounce, bool save)
+		{
+			purple_pounce_set_save(pounce.Reference, save);
+		}
+
+		/*
+		 * Function Name: purple_pounce_action_register
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_action_register(PurplePounce * pounce, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_action_register(IntPtr pounce, string name);
+
+		public static void ActionRegister(PurplePounce pounce, string name)
+		{
+			purple_pounce_action_register(pounce.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_data(PurplePounce * pounce, void * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_data(IntPtr pounce, IntPtr data);
+
+		public static void SetData(PurplePounce pounce, IntPtr data)
+		{
+			purple_pounce_set_data(pounce.Reference, data);
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_events
+		 * Function Type: PurplePounceEvent
+		 * Function RawType: PurplePounceEvent
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePounceEvent purple_pounce_get_events(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pounce.PurplePounceEvent purple_pounce_get_events(IntPtr pounce);
+
+		public static Pounce.PurplePounceEvent GetEvents(PurplePounce pounce)
+		{
+			/* Unable to process the return value of purple_pounce_get_events, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_options
+		 * Function Type: PurplePounceOption
+		 * Function RawType: PurplePounceOption
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePounceOption purple_pounce_get_options(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pounce.PurplePounceOption purple_pounce_get_options(IntPtr pounce);
+
+		public static Pounce.PurplePounceOption GetOptions(PurplePounce pounce)
+		{
+			/* Unable to process the return value of purple_pounce_get_options, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_pouncer
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_pounce_get_pouncer(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_pounce_get_pouncer(IntPtr pounce);
+
+		public static PurpleAccount GetPouncer(PurplePounce pounce)
+		{
+			return new PurpleAccount(purple_pounce_get_pouncer(pounce.Reference));
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_pouncee
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_pounce_get_pouncee(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_pounce_get_pouncee(IntPtr pounce);
+
+		public static string GetPouncee(PurplePounce pounce)
+		{
+			return purple_pounce_get_pouncee(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_save
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pounce_get_save(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pounce_get_save(IntPtr pounce);
+
+		public static bool GetSave(PurplePounce pounce)
+		{
+			return purple_pounce_get_save(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_data
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_pounce_get_data(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_pounce_get_data(IntPtr pounce);
+
+		public static IntPtr GetData(PurplePounce pounce)
+		{
+			return purple_pounce_get_data(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounces_load
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pounces_load()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pounces_load();
+
+		public static bool PouncesLoad()
+		{
+			return purple_pounces_load();
+		}
+
+		/*
+		 * Function Name: purple_pounces_unregister_handler
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounces_unregister_handler(char * ui)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounces_unregister_handler(string ui);
+
+		public static void PouncesUnregisterHandler(string ui)
+		{
+			purple_pounces_unregister_handler(ui);
+		}
+
+		/*
+		 * Function Name: purple_pounces_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_pounces_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_pounces_get_all in file "pounce.h".
+		 * Message: Unknown inner-type of argument 0 of purple_pounces_get_all
+		 */
+
+		/*
+		 * Function Name: purple_pounces_get_all_for_ui
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_pounces_get_all_for_ui(char * ui)
+		 * 
+		 * Could not generate a wrapper for purple_pounces_get_all_for_ui in file "pounce.h".
+		 * Message: Unknown inner-type of argument 0 of purple_pounces_get_all_for_ui
+		 */
+
+		/*
+		 * Function Name: purple_pounces_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_pounces_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_pounces_get_handle();
+
+		public static IntPtr PouncesGetHandle()
+		{
+			return purple_pounces_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_pounces_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounces_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounces_init();
+
+		public static void PouncesInit()
+		{
+			purple_pounces_init();
+		}
+
+		/*
+		 * Function Name: purple_pounces_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounces_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounces_uninit();
+
+		public static void PouncesUninit()
+		{
+			purple_pounces_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Prefs.cs	b365a0b46620d7c77312265dcd82953ff7c9d79c
+++ libpurple/wrapper/Prefs.cs	b365a0b46620d7c77312265dcd82953ff7c9d79c
@@ -0,0 +1,630 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prefs.h
+	 */
+	public class Prefs
+	{
+		public enum PurplePrefType
+		{
+			PURPLE_PREF_NONE,
+			PURPLE_PREF_BOOLEAN,
+			PURPLE_PREF_INT,
+			PURPLE_PREF_STRING,
+			PURPLE_PREF_STRING_LIST,
+			PURPLE_PREF_PATH,
+			PURPLE_PREF_PATH_LIST
+		};
+
+		public delegate void PurplePrefCallback(string name, Prefs.PurplePrefType type, IntPtr val, IntPtr data);
+
+		/*
+		 * Function Name: purple_prefs_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_prefs_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_prefs_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_prefs_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_prefs_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_init();
+
+		public static void Init()
+		{
+			purple_prefs_init();
+		}
+
+		/*
+		 * Function Name: purple_prefs_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_uninit();
+
+		public static void Uninit()
+		{
+			purple_prefs_uninit();
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_none
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_none(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_none(string name);
+
+		public static void AddNone(string name)
+		{
+			purple_prefs_add_none(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_bool
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_bool(char * name, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_bool(string name, bool value);
+
+		public static void AddBool(string name, bool value)
+		{
+			purple_prefs_add_bool(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_int(char * name, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_int(string name, int value);
+
+		public static void AddInt(string name, int value)
+		{
+			purple_prefs_add_int(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_string
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_string(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_string(string name, string value);
+
+		public static void AddString(string name, string value)
+		{
+			purple_prefs_add_string(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_string_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_string_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_add_string_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_add_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_path(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_path(string name, string value);
+
+		public static void AddPath(string name, string value)
+		{
+			purple_prefs_add_path(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_path_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_path_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_add_path_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_remove
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_remove(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_remove(string name);
+
+		public static void Remove(string name)
+		{
+			purple_prefs_remove(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_rename
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_rename(char * oldname, char * newname)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_rename(string oldname, string newname);
+
+		public static void Rename(string oldname, string newname)
+		{
+			purple_prefs_rename(oldname, newname);
+		}
+
+		/*
+		 * Function Name: purple_prefs_rename_boolean_toggle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_rename_boolean_toggle(char * oldname, char * newname)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_rename_boolean_toggle(string oldname, string newname);
+
+		public static void RenameBooleanToggle(string oldname, string newname)
+		{
+			purple_prefs_rename_boolean_toggle(oldname, newname);
+		}
+
+		/*
+		 * Function Name: purple_prefs_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_destroy()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_destroy();
+
+		public static void Destroy()
+		{
+			purple_prefs_destroy();
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_generic
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_generic(char * name, gpointer value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_generic(string name, IntPtr value);
+
+		public static void SetGeneric(string name, IntPtr value)
+		{
+			purple_prefs_set_generic(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_bool
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_bool(char * name, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_bool(string name, bool value);
+
+		public static void SetBool(string name, bool value)
+		{
+			purple_prefs_set_bool(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_int(char * name, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_int(string name, int value);
+
+		public static void SetInt(string name, int value)
+		{
+			purple_prefs_set_int(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_string
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_string(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_string(string name, string value);
+
+		public static void SetString(string name, string value)
+		{
+			purple_prefs_set_string(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_string_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_string_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_set_string_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_set_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_path(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_path(string name, string value);
+
+		public static void SetPath(string name, string value)
+		{
+			purple_prefs_set_path(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_path_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_path_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_set_path_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_exists
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_prefs_exists(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_prefs_exists(string name);
+
+		public static bool Exists(string name)
+		{
+			return purple_prefs_exists(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_type
+		 * Function Type: PurplePrefType
+		 * Function RawType: PurplePrefType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePrefType purple_prefs_get_type(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Prefs.PurplePrefType purple_prefs_get_type(string name);
+
+		public static Prefs.PurplePrefType GetType(string name)
+		{
+			/* Unable to process the return value of purple_prefs_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_bool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_prefs_get_bool(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_prefs_get_bool(string name);
+
+		public static bool GetBool(string name)
+		{
+			return purple_prefs_get_bool(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_prefs_get_int(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_prefs_get_int(string name);
+
+		public static int GetInt(string name)
+		{
+			return purple_prefs_get_int(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_string
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_prefs_get_string(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_prefs_get_string(string name);
+
+		public static string GetString(string name)
+		{
+			return purple_prefs_get_string(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_string_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prefs_get_string_list(char * name)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_get_string_list in file "prefs.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prefs_get_string_list
+		 */
+
+		/*
+		 * Function Name: purple_prefs_get_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_prefs_get_path(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_prefs_get_path(string name);
+
+		public static string GetPath(string name)
+		{
+			return purple_prefs_get_path(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_path_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prefs_get_path_list(char * name)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_get_path_list in file "prefs.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prefs_get_path_list
+		 */
+
+		/*
+		 * Function Name: purple_prefs_get_children_names
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prefs_get_children_names(char * name)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_get_children_names in file "prefs.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prefs_get_children_names
+		 */
+
+		/*
+		 * Function Name: purple_prefs_disconnect_callback
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_disconnect_callback(guint callback_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_disconnect_callback(uint callback_id);
+
+		public static void DisconnectCallback(uint callback_id)
+		{
+			purple_prefs_disconnect_callback(callback_id);
+		}
+
+		/*
+		 * Function Name: purple_prefs_disconnect_by_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_disconnect_by_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_disconnect_by_handle(IntPtr handle);
+
+		public static void DisconnectByHandle(IntPtr handle)
+		{
+			purple_prefs_disconnect_by_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_prefs_trigger_callback
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_trigger_callback(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_trigger_callback(string name);
+
+		public static void TriggerCallback(string name)
+		{
+			purple_prefs_trigger_callback(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_load
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_prefs_load()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_prefs_load();
+
+		public static bool Load()
+		{
+			return purple_prefs_load();
+		}
+
+		/*
+		 * Function Name: purple_prefs_update_old
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_update_old()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_update_old();
+
+		public static void UpdateOld()
+		{
+			purple_prefs_update_old();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Privacy.cs	0e081fdf34b0a1de943365e30b868b0002da0a2b
+++ libpurple/wrapper/Privacy.cs	0e081fdf34b0a1de943365e30b868b0002da0a2b
@@ -0,0 +1,129 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: privacy.h
+	 */
+	public class Privacy
+	{
+		public enum PurplePrivacyType
+		{
+			PURPLE_PRIVACY_ALLOW_ALL = 1,
+			PURPLE_PRIVACY_DENY_ALL,
+			PURPLE_PRIVACY_ALLOW_USERS,
+			PURPLE_PRIVACY_DENY_USERS,
+			PURPLE_PRIVACY_ALLOW_BUDDYLIST
+		};
+
+
+		/*
+		 * Function Name: purple_privacy_check
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_privacy_check(PurpleAccount * account, char * who)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_privacy_check(IntPtr account, string who);
+
+		public static bool Check(PurpleAccount account, string who)
+		{
+			return purple_privacy_check(account.Reference, who);
+		}
+
+		/*
+		 * Function Name: purple_privacy_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_privacy_set_ui_ops(PurplePrivacyUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_privacy_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurplePrivacyUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_privacy_get_ui_ops
+		 * Function Type: PurplePrivacyUiOps *
+		 * Function RawType: PurplePrivacyUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePrivacyUiOps * purple_privacy_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_privacy_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePrivacyUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_privacy_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_privacy_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_privacy_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_privacy_init();
+
+		public static void Init()
+		{
+			purple_privacy_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Proxy.cs	8fc9134c1fac5769ac297628282f9cfbfd1322c2
+++ libpurple/wrapper/Proxy.cs	8fc9134c1fac5769ac297628282f9cfbfd1322c2
@@ -0,0 +1,418 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: proxy.h
+	 */
+	public class Proxy
+	{
+		public enum PurpleProxyType
+		{
+			PURPLE_PROXY_USE_GLOBAL = -1,
+			PURPLE_PROXY_NONE = 0,
+			PURPLE_PROXY_HTTP,
+			PURPLE_PROXY_SOCKS4,
+			PURPLE_PROXY_SOCKS5,
+			PURPLE_PROXY_USE_ENVVAR
+		};
+
+		public delegate void PurpleProxyConnectFunction(IntPtr data, int source, string error_message);
+
+		/*
+		 * Function Name: purple_proxy_info_new
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_proxy_info_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_proxy_info_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr InfoNew()
+		{
+			/* Unable to process the return value of purple_proxy_info_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_destroy(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_destroy(IntPtr info);
+
+		public static void InfoDestroy(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_type(PurpleProxyInfo * info, PurpleProxyType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_type(IntPtr info, Proxy.PurpleProxyType type);
+
+		public static void InfoSetType(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, Proxy.PurpleProxyType type)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_host
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_host(PurpleProxyInfo * info, char * host)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_host(IntPtr info, string host);
+
+		public static void InfoSetHost(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, string host)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_port
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_port(PurpleProxyInfo * info, int port)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_port(IntPtr info, int port);
+
+		public static void InfoSetPort(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, int port)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_username
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_username(PurpleProxyInfo * info, char * username)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_username(IntPtr info, string username);
+
+		public static void InfoSetUsername(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, string username)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_password(PurpleProxyInfo * info, char * password)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_password(IntPtr info, string password);
+
+		public static void InfoSetPassword(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, string password)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_type
+		 * Function Type: PurpleProxyType
+		 * Function RawType: PurpleProxyType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleProxyType purple_proxy_info_get_type(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Proxy.PurpleProxyType purple_proxy_info_get_type(IntPtr info);
+
+		public static Proxy.PurpleProxyType InfoGetType(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_host
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_proxy_info_get_host(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_proxy_info_get_host(IntPtr info);
+
+		public static string InfoGetHost(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_port
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_proxy_info_get_port(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_proxy_info_get_port(IntPtr info);
+
+		public static int InfoGetPort(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_username
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_proxy_info_get_username(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_proxy_info_get_username(IntPtr info);
+
+		public static string InfoGetUsername(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_password
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_proxy_info_get_password(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_proxy_info_get_password(IntPtr info);
+
+		public static string InfoGetPassword(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_global_proxy_get_info
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_global_proxy_get_info()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_global_proxy_get_info();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr GlobalProxyGetInfo()
+		{
+			/* Unable to process the return value of purple_global_proxy_get_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_global_proxy_set_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_global_proxy_set_info(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_global_proxy_set_info(IntPtr info);
+
+		public static void GlobalProxySetInfo(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_proxy_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_proxy_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_proxy_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_proxy_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_init();
+
+		public static void Init()
+		{
+			purple_proxy_init();
+		}
+
+		/*
+		 * Function Name: purple_proxy_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_uninit();
+
+		public static void Uninit()
+		{
+			purple_proxy_uninit();
+		}
+
+		/*
+		 * Function Name: purple_proxy_get_setup
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_proxy_get_setup(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_proxy_get_setup(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr GetSetup(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_proxy_get_setup, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_connect_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_connect_cancel(PurpleProxyConnectData * connect_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_connect_cancel(IntPtr connect_data);
+
+		public static void ConnectCancel(/* Resolved as PointerToUnknownStruct to PurpleProxyConnectData */ IntPtr connect_data)
+		{
+			/* Unable to process connect_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_connect_cancel_with_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_connect_cancel_with_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_connect_cancel_with_handle(IntPtr handle);
+
+		public static void ConnectCancelWithHandle(IntPtr handle)
+		{
+			purple_proxy_connect_cancel_with_handle(handle);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Prpl.cs	414add09cf2fe747cab8c3971b4fe8229caf7800
+++ libpurple/wrapper/Prpl.cs	414add09cf2fe747cab8c3971b4fe8229caf7800
@@ -0,0 +1,355 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 */
+	public class Prpl
+	{
+		public enum PurpleIconScaleRules
+		{
+			PURPLE_ICON_SCALE_DISPLAY = 0x01,
+			PURPLE_ICON_SCALE_SEND = 0x02
+		};
+
+		public enum PurpleProtocolOptions
+		{
+			OPT_PROTO_UNIQUE_CHATNAME = 0x00000004,
+			OPT_PROTO_CHAT_TOPIC = 0x00000008,
+			OPT_PROTO_NO_PASSWORD = 0x00000010,
+			OPT_PROTO_MAIL_CHECK = 0x00000020,
+			OPT_PROTO_IM_IMAGE = 0x00000040,
+			OPT_PROTO_PASSWORD_OPTIONAL = 0x00000080,
+			OPT_PROTO_USE_POINTSIZE = 0x00000100,
+			OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200,
+			OPT_PROTO_SLASH_COMMANDS_NATIVE = 0x00000400
+		};
+
+
+		/*
+		 * Function Name: purple_attention_type_set_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_name(PurpleAttentionType * type, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_name(IntPtr type, string name);
+
+		public static void AttentionTypeSetName(PurpleAttentionType type, string name)
+		{
+			purple_attention_type_set_name(type.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_incoming_desc
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_incoming_desc(PurpleAttentionType * type, char * desc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_incoming_desc(IntPtr type, string desc);
+
+		public static void AttentionTypeSetIncomingDesc(PurpleAttentionType type, string desc)
+		{
+			purple_attention_type_set_incoming_desc(type.Reference, desc);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_outgoing_desc
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_outgoing_desc(PurpleAttentionType * type, char * desc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_outgoing_desc(IntPtr type, string desc);
+
+		public static void AttentionTypeSetOutgoingDesc(PurpleAttentionType type, string desc)
+		{
+			purple_attention_type_set_outgoing_desc(type.Reference, desc);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_icon_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_icon_name(PurpleAttentionType * type, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_icon_name(IntPtr type, string name);
+
+		public static void AttentionTypeSetIconName(PurpleAttentionType type, string name)
+		{
+			purple_attention_type_set_icon_name(type.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_unlocalized_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_unlocalized_name(PurpleAttentionType * type, char * ulname)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_unlocalized_name(IntPtr type, string ulname);
+
+		public static void AttentionTypeSetUnlocalizedName(PurpleAttentionType type, string ulname)
+		{
+			purple_attention_type_set_unlocalized_name(type.Reference, ulname);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_name(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_name(IntPtr type);
+
+		public static string AttentionTypeGetName(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_name(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_incoming_desc
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_incoming_desc(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_incoming_desc(IntPtr type);
+
+		public static string AttentionTypeGetIncomingDesc(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_incoming_desc(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_outgoing_desc
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_outgoing_desc(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_outgoing_desc(IntPtr type);
+
+		public static string AttentionTypeGetOutgoingDesc(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_outgoing_desc(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_icon_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_icon_name(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_icon_name(IntPtr type);
+
+		public static string AttentionTypeGetIconName(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_icon_name(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_unlocalized_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_unlocalized_name(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_unlocalized_name(IntPtr type);
+
+		public static string AttentionTypeGetUnlocalizedName(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_unlocalized_name(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_account_login_time
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_account_login_time(PurpleAccount * account, time_t login_time)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_account_login_time(IntPtr account, ulong login_time);
+
+		public static void GotAccountLoginTime(PurpleAccount account, DateTime login_time)
+		{
+			ulong _PurpleWrapper_param1 = (ulong)(login_time - new DateTime(1970, 1, 1)).TotalSeconds;
+			purple_prpl_got_account_login_time(account.Reference, _PurpleWrapper_param1);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_account_actions
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_account_actions(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_account_actions(IntPtr account);
+
+		public static void GotAccountActions(PurpleAccount account)
+		{
+			purple_prpl_got_account_actions(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_prpl_get_statuses
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prpl_get_statuses(PurpleAccount * account, PurplePresence * presence)
+		 * 
+		 * Could not generate a wrapper for purple_prpl_get_statuses in file "prpl.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prpl_get_statuses
+		 */
+
+		/*
+		 * Function Name: purple_prpl_send_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_send_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_send_attention(IntPtr gc, string who, uint type_code);
+
+		public static void SendAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			purple_prpl_send_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_attention(IntPtr gc, string who, uint type_code);
+
+		public static void GotAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			purple_prpl_got_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_attention_in_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_attention_in_chat(PurpleConnection * gc, int id, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_attention_in_chat(IntPtr gc, int id, string who, uint type_code);
+
+		public static void GotAttentionInChat(PurpleConnection gc, int id, string who, uint type_code)
+		{
+			purple_prpl_got_attention_in_chat(gc.Reference, id, who, type_code);
+		}
+
+		/*
+		 * Function Name: purple_find_prpl
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_find_prpl(char * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_prpl(string id);
+
+		public static PurplePlugin FindPrpl(string id)
+		{
+			return new PurplePlugin(purple_find_prpl(id));
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/PurpleAccount.cs	e3322674a37f1ff5ad009a0ca95797f96e5a2b0c
+++ libpurple/wrapper/PurpleAccount.cs	e3322674a37f1ff5ad009a0ca95797f96e5a2b0c
@@ -0,0 +1,567 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: account.h
+	 * Structure: PurpleAccount
+	 */
+	public class PurpleAccount : UnmanagedWrapper<_PurpleAccount>
+	{
+		public PurpleAccount()
+		{
+		}
+
+		public PurpleAccount(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleAccount)Marshal.PtrToStructure(this.Reference, typeof(_PurpleAccount));
+		}
+
+		/*
+		 * Argument Name: username
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string username
+		{
+			get
+			{
+				return this.Data.username;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.username = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: password
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string password
+		{
+			get
+			{
+				return this.Data.password;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.password = value;
+			}
+		}
+
+		/*
+		 * Argument Name: user_info
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string user_info
+		{
+			get
+			{
+				return this.Data.user_info;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.user_info = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buddy_icon_path
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string buddy_icon_path
+		{
+			get
+			{
+				return this.Data.buddy_icon_path;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buddy_icon_path = value;
+			}
+		}
+
+		/*
+		 * Argument Name: remember_pass
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool remember_pass
+		{
+			get
+			{
+				return this.Data.remember_pass;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remember_pass = value;
+			}
+		}
+
+		/*
+		 * Argument Name: protocol_id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string protocol_id
+		{
+			get
+			{
+				return this.Data.protocol_id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.protocol_id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: gc
+		 * Argument Type: PurpleConnection *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConnection gc
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: disconnecting
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool disconnecting
+		{
+			get
+			{
+				return this.Data.disconnecting;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.disconnecting = value;
+			}
+		}
+
+		/*
+		 * Argument Name: settings
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.settings in file "account.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ui_settings
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.ui_settings in file "account.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: proxy_info
+		 * Argument Type: PurpleProxyInfo *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr proxy_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: permit
+		 * Argument Type: GSList *
+		 * Argument Category: PointerToGSList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.permit in file "account.h".
+		 * Message: Unable to provide a type for GSList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: deny
+		 * Argument Type: GSList *
+		 * Argument Category: PointerToGSList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.deny in file "account.h".
+		 * Message: Unable to provide a type for GSList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: perm_deny
+		 * Argument Type: PurplePrivacyType
+		 * Argument Category: KnownEnum
+		 */
+		public Privacy.PurplePrivacyType perm_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_types
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.status_types in file "account.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: presence
+		 * Argument Type: PurplePresence *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: system_log
+		 * Argument Type: PurpleLog *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleLog system_log
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: registration_cb
+		 * Argument Type: PurpleAccountRegistrationCb
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Account.PurpleAccountRegistrationCb registration_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: registration_cb_user_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr registration_cb_user_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleAccount
+	{
+		/*
+		 * char * username
+		 */
+		public string username;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * char * password
+		 */
+		public string password;
+
+		/*
+		 * char * user_info
+		 */
+		public string user_info;
+
+		/*
+		 * char * buddy_icon_path
+		 */
+		public string buddy_icon_path;
+
+		/*
+		 * gboolean remember_pass
+		 */
+		public bool remember_pass;
+
+		/*
+		 * char * protocol_id
+		 */
+		public string protocol_id;
+
+		/*
+		 * PurpleConnection * gc
+		 */
+		public IntPtr gc;
+
+		/*
+		 * gboolean disconnecting
+		 */
+		public bool disconnecting;
+
+		/*
+		 * GHashTable * settings
+		 */
+		public IntPtr settings;
+
+		/*
+		 * GHashTable * ui_settings
+		 */
+		public IntPtr ui_settings;
+
+		/*
+		 * PurpleProxyInfo * proxy_info
+		 */
+		public IntPtr proxy_info;
+
+		/*
+		 * GSList * permit
+		 */
+		public IntPtr permit;
+
+		/*
+		 * GSList * deny
+		 */
+		public IntPtr deny;
+
+		/*
+		 * PurplePrivacyType perm_deny
+		 */
+		public Privacy.PurplePrivacyType perm_deny;
+
+		/*
+		 * GList * status_types
+		 */
+		public IntPtr status_types;
+
+		/*
+		 * PurplePresence * presence
+		 */
+		public IntPtr presence;
+
+		/*
+		 * PurpleLog * system_log
+		 */
+		public IntPtr system_log;
+
+		/*
+		 * void * ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * PurpleAccountRegistrationCb registration_cb
+		 */
+		public IntPtr registration_cb;
+
+		/*
+		 * void * registration_cb_user_data
+		 */
+		public IntPtr registration_cb_user_data;
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleAccountUiOps.cs	f9c060ab1fbcd085b0214f31dd76445397394bc5
+++ libpurple/wrapper/PurpleAccountUiOps.cs	f9c060ab1fbcd085b0214f31dd76445397394bc5
@@ -0,0 +1,292 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: account.h
+	 * Structure: PurpleAccountUiOps
+	 */
+	public class PurpleAccountUiOps : UnmanagedWrapper<_PurpleAccountUiOps>
+	{
+		public PurpleAccountUiOps()
+		{
+		}
+
+		public PurpleAccountUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleAccountUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleAccountUiOps));
+		}
+
+		/*
+		 * Argument Name: notify_added
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr notify_added
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_changed
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr status_changed
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_authorize
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr request_authorize
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: close_account_request
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr close_account_request
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleAccountUiOps
+	{
+		/*
+		 * void (*notify_added)(PurpleAccount * account, char * remote_user, char * id, char * alias, char * message)
+		 */
+		public IntPtr notify_added;
+
+		/*
+		 * void (*status_changed)(PurpleAccount * account, PurpleStatus * status)
+		 */
+		public IntPtr status_changed;
+
+		/*
+		 * void (*request_add)(PurpleAccount * account, char * remote_user, char * id, char * alias, char * message)
+		 */
+		public IntPtr request_add;
+
+		/*
+		 * void * (*request_authorize)(PurpleAccount * account, char * remote_user, char * id, char * alias, char * message, gboolean on_list, PurpleAccountRequestAuthorizationCb authorize_cb, PurpleAccountRequestAuthorizationCb deny_cb, void * user_data)
+		 */
+		public IntPtr request_authorize;
+
+		/*
+		 * void (*close_account_request)(void * ui_handle)
+		 */
+		public IntPtr close_account_request;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleAttentionType.cs	9bfd14f62ce4a5de8dd0603fd2db5224ea7024a2
+++ libpurple/wrapper/PurpleAttentionType.cs	9bfd14f62ce4a5de8dd0603fd2db5224ea7024a2
@@ -0,0 +1,267 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 * Structure: PurpleAttentionType
+	 */
+	public class PurpleAttentionType : UnmanagedWrapper<_PurpleAttentionType>
+	{
+		public PurpleAttentionType()
+		{
+		}
+
+		public PurpleAttentionType(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleAttentionType)Marshal.PtrToStructure(this.Reference, typeof(_PurpleAttentionType));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr name
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: incoming_description
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr incoming_description
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: outgoing_description
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr outgoing_description
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: icon_name
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr icon_name
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: unlocalized_name
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr unlocalized_name
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reserved2
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reserved3
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reserved4
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleAttentionType
+	{
+		/*
+		 * const char * name
+		 */
+		public IntPtr name;
+
+		/*
+		 * const char * incoming_description
+		 */
+		public IntPtr incoming_description;
+
+		/*
+		 * const char * outgoing_description
+		 */
+		public IntPtr outgoing_description;
+
+		/*
+		 * const char * icon_name
+		 */
+		public IntPtr icon_name;
+
+		/*
+		 * const char * unlocalized_name
+		 */
+		public IntPtr unlocalized_name;
+
+		/*
+		 * gpointer reserved2
+		 */
+		public IntPtr reserved2;
+
+		/*
+		 * gpointer reserved3
+		 */
+		public IntPtr reserved3;
+
+		/*
+		 * gpointer reserved4
+		 */
+		public IntPtr reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBlistNode.cs	b030a90dedec43e692519fc0e4f7977ed91d45be
+++ libpurple/wrapper/PurpleBlistNode.cs	b030a90dedec43e692519fc0e4f7977ed91d45be
@@ -0,0 +1,257 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBlistNode
+	 */
+	public class PurpleBlistNode : UnmanagedWrapper<_PurpleBlistNode>
+	{
+		public PurpleBlistNode()
+		{
+		}
+
+		public PurpleBlistNode(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBlistNode)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBlistNode));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleBlistNodeType
+		 * Argument Category: KnownEnum
+		 */
+		public Blist.PurpleBlistNodeType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: prev
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode prev
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: next
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode next
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: child
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode child
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: settings
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBlistNode.settings in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void          *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to void */ IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleBlistNodeFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Blist.PurpleBlistNodeFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBlistNode
+	{
+		/*
+		 * PurpleBlistNodeType type
+		 */
+		public Blist.PurpleBlistNodeType type;
+
+		/*
+		 * PurpleBlistNode * prev
+		 */
+		public IntPtr prev;
+
+		/*
+		 * PurpleBlistNode * next
+		 */
+		public IntPtr next;
+
+		/*
+		 * PurpleBlistNode * parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * PurpleBlistNode * child
+		 */
+		public IntPtr child;
+
+		/*
+		 * GHashTable * settings
+		 */
+		public IntPtr settings;
+
+		/*
+		 * void          * ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * PurpleBlistNodeFlags flags
+		 */
+		public Blist.PurpleBlistNodeFlags flags;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBlistUiOps.cs	96fa647f23de57a21497b0054406326be9367b70
+++ libpurple/wrapper/PurpleBlistUiOps.cs	96fa647f23de57a21497b0054406326be9367b70
@@ -0,0 +1,417 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBlistUiOps
+	 */
+	public class PurpleBlistUiOps : UnmanagedWrapper<_PurpleBlistUiOps>
+	{
+		public PurpleBlistUiOps()
+		{
+		}
+
+		public PurpleBlistUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBlistUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBlistUiOps));
+		}
+
+		/*
+		 * Argument Name: new_list
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr new_list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: new_node
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr new_node
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: show
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr show
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: update
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr update
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_visible
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_visible
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add_group
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add_group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBlistUiOps
+	{
+		/*
+		 * void (*new_list)(PurpleBuddyList * list)
+		 */
+		public IntPtr new_list;
+
+		/*
+		 * void (*new_node)(PurpleBlistNode * node)
+		 */
+		public IntPtr new_node;
+
+		/*
+		 * void (*show)(PurpleBuddyList * list)
+		 */
+		public IntPtr show;
+
+		/*
+		 * void (*update)(PurpleBuddyList * list, PurpleBlistNode * node)
+		 */
+		public IntPtr update;
+
+		/*
+		 * void (*remove)(PurpleBuddyList * list, PurpleBlistNode * node)
+		 */
+		public IntPtr remove;
+
+		/*
+		 * void (*destroy)(PurpleBuddyList * list)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*set_visible)(PurpleBuddyList * list, gboolean show)
+		 */
+		public IntPtr set_visible;
+
+		/*
+		 * void (*request_add_buddy)(PurpleAccount * account, char * username, char * group, char * alias)
+		 */
+		public IntPtr request_add_buddy;
+
+		/*
+		 * void (*request_add_chat)(PurpleAccount * account, PurpleGroup * group, char * alias, char * name)
+		 */
+		public IntPtr request_add_chat;
+
+		/*
+		 * void (*request_add_group)()
+		 */
+		public IntPtr request_add_group;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBuddy.cs	ee57b87f0101fe5d0be8f31f0982e8ae840d53c6
+++ libpurple/wrapper/PurpleBuddy.cs	ee57b87f0101fe5d0be8f31f0982e8ae840d53c6
@@ -0,0 +1,260 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBuddy
+	 */
+	public class PurpleBuddy : UnmanagedWrapper<_PurpleBuddy>
+	{
+		public PurpleBuddy()
+		{
+		}
+
+		public PurpleBuddy(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBuddy)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBuddy));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBuddy.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: server_alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string server_alias
+		{
+			get
+			{
+				return this.Data.server_alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.server_alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: icon
+		 * Argument Type: PurpleBuddyIcon *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: presence
+		 * Argument Type: PurplePresence *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBuddy
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBuddy.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * char * server_alias
+		 */
+		public string server_alias;
+
+		/*
+		 * void * proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * PurpleBuddyIcon * icon
+		 */
+		public IntPtr icon;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * PurplePresence * presence
+		 */
+		public IntPtr presence;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBuddyIconSpec.cs	86ea6086cc253536dcae5c52c8ea29635b84b455
+++ libpurple/wrapper/PurpleBuddyIconSpec.cs	86ea6086cc253536dcae5c52c8ea29635b84b455
@@ -0,0 +1,242 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 * Structure: PurpleBuddyIconSpec
+	 */
+	public class PurpleBuddyIconSpec : UnmanagedWrapper<_PurpleBuddyIconSpec>
+	{
+		public PurpleBuddyIconSpec()
+		{
+		}
+
+		public PurpleBuddyIconSpec(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBuddyIconSpec)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBuddyIconSpec));
+		}
+
+		/*
+		 * Argument Name: format
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string format
+		{
+			get
+			{
+				return this.Data.format;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.format = value;
+			}
+		}
+
+		/*
+		 * Argument Name: min_width
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int min_width
+		{
+			get
+			{
+				return this.Data.min_width;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.min_width = value;
+			}
+		}
+
+		/*
+		 * Argument Name: min_height
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int min_height
+		{
+			get
+			{
+				return this.Data.min_height;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.min_height = value;
+			}
+		}
+
+		/*
+		 * Argument Name: max_width
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int max_width
+		{
+			get
+			{
+				return this.Data.max_width;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.max_width = value;
+			}
+		}
+
+		/*
+		 * Argument Name: max_height
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int max_height
+		{
+			get
+			{
+				return this.Data.max_height;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.max_height = value;
+			}
+		}
+
+		/*
+		 * Argument Name: max_filesize
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong max_filesize
+		{
+			get
+			{
+				return this.Data.max_filesize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.max_filesize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: scale_rules
+		 * Argument Type: PurpleIconScaleRules
+		 * Argument Category: KnownEnum
+		 */
+		public Prpl.PurpleIconScaleRules scale_rules
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBuddyIconSpec
+	{
+		/*
+		 * char * format
+		 */
+		public string format;
+
+		/*
+		 * int min_width
+		 */
+		public int min_width;
+
+		/*
+		 * int min_height
+		 */
+		public int min_height;
+
+		/*
+		 * int max_width
+		 */
+		public int max_width;
+
+		/*
+		 * int max_height
+		 */
+		public int max_height;
+
+		/*
+		 * size_t max_filesize
+		 */
+		public ulong max_filesize;
+
+		/*
+		 * PurpleIconScaleRules scale_rules
+		 */
+		public Prpl.PurpleIconScaleRules scale_rules;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBuddyList.cs	689bcda277f630ba19172b033cee720e221cae04
+++ libpurple/wrapper/PurpleBuddyList.cs	689bcda277f630ba19172b033cee720e221cae04
@@ -0,0 +1,132 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBuddyList
+	 */
+	public class PurpleBuddyList : UnmanagedWrapper<_PurpleBuddyList>
+	{
+		public PurpleBuddyList()
+		{
+		}
+
+		public PurpleBuddyList(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBuddyList)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBuddyList));
+		}
+
+		/*
+		 * Argument Name: root
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode root
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: buddies
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBuddyList.buddies in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBuddyList
+	{
+		/*
+		 * PurpleBlistNode * root
+		 */
+		public IntPtr root;
+
+		/*
+		 * GHashTable * buddies
+		 */
+		public IntPtr buddies;
+
+		/*
+		 * void * ui_data
+		 */
+		public IntPtr ui_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificate.cs	19e6265864a426325f86e3cb40f507c2c0554958
+++ libpurple/wrapper/PurpleCertificate.cs	19e6265864a426325f86e3cb40f507c2c0554958
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificate
+	 */
+	public class PurpleCertificate : UnmanagedWrapper<_PurpleCertificate>
+	{
+		public PurpleCertificate()
+		{
+		}
+
+		public PurpleCertificate(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificate)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificate));
+		}
+
+		/*
+		 * Argument Name: scheme
+		 * Argument Type: PurpleCertificateScheme *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateScheme scheme
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificate
+	{
+		/*
+		 * PurpleCertificateScheme * scheme
+		 */
+		public IntPtr scheme;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificatePool.cs	5d44cddd088d31d7ad1417f69d683504534a4661
+++ libpurple/wrapper/PurpleCertificatePool.cs	5d44cddd088d31d7ad1417f69d683504534a4661
@@ -0,0 +1,442 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificatePool
+	 */
+	public class PurpleCertificatePool : UnmanagedWrapper<_PurpleCertificatePool>
+	{
+		public PurpleCertificatePool()
+		{
+		}
+
+		public PurpleCertificatePool(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificatePool)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificatePool));
+		}
+
+		/*
+		 * Argument Name: scheme_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string scheme_name
+		{
+			get
+			{
+				return this.Data.scheme_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.scheme_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fullname
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string fullname
+		{
+			get
+			{
+				return this.Data.fullname;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fullname = value;
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: init
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr init
+		{
+			get
+			{
+				return this.Data.init;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.init = value;
+			}
+		}
+
+		/*
+		 * Argument Name: uninit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr uninit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cert_in_pool
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr cert_in_pool
+		{
+			get
+			{
+				return this.Data.cert_in_pool;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.cert_in_pool = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_cert
+		 * Argument Type: PurpleCertificate *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr get_cert
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: put_cert
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr put_cert
+		{
+			get
+			{
+				return this.Data.put_cert;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.put_cert = value;
+			}
+		}
+
+		/*
+		 * Argument Name: delete_cert
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr delete_cert
+		{
+			get
+			{
+				return this.Data.delete_cert;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.delete_cert = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_idlist
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr get_idlist
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificatePool
+	{
+		/*
+		 * gchar * scheme_name
+		 */
+		public string scheme_name;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * gchar * fullname
+		 */
+		public string fullname;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+		/*
+		 * gboolean (*init)()
+		 */
+		public IntPtr init;
+
+		/*
+		 * void (*uninit)()
+		 */
+		public IntPtr uninit;
+
+		/*
+		 * gboolean (*cert_in_pool)(gchar * id)
+		 */
+		public IntPtr cert_in_pool;
+
+		/*
+		 * PurpleCertificate * (*get_cert)(gchar * id)
+		 */
+		public IntPtr get_cert;
+
+		/*
+		 * gboolean (*put_cert)(gchar * id, PurpleCertificate * crt)
+		 */
+		public IntPtr put_cert;
+
+		/*
+		 * gboolean (*delete_cert)(gchar * id)
+		 */
+		public IntPtr delete_cert;
+
+		/*
+		 * GList * (*get_idlist)()
+		 */
+		public IntPtr get_idlist;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificateScheme.cs	fb0d4b31bde4d728a8c8e4628efa20e02b0d535b
+++ libpurple/wrapper/PurpleCertificateScheme.cs	fb0d4b31bde4d728a8c8e4628efa20e02b0d535b
@@ -0,0 +1,492 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificateScheme
+	 */
+	public class PurpleCertificateScheme : UnmanagedWrapper<_PurpleCertificateScheme>
+	{
+		public PurpleCertificateScheme()
+		{
+		}
+
+		public PurpleCertificateScheme(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificateScheme)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificateScheme));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fullname
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string fullname
+		{
+			get
+			{
+				return this.Data.fullname;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fullname = value;
+			}
+		}
+
+		/*
+		 * Argument Name: import_certificate
+		 * Argument Type: PurpleCertificate *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr import_certificate
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: export_certificate
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr export_certificate
+		{
+			get
+			{
+				return this.Data.export_certificate;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.export_certificate = value;
+			}
+		}
+
+		/*
+		 * Argument Name: copy_certificate
+		 * Argument Type: PurpleCertificate *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr copy_certificate
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy_certificate
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy_certificate
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: signed_by
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr signed_by
+		{
+			get
+			{
+				return this.Data.signed_by;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.signed_by = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_fingerprint_sha1
+		 * Argument Type: GByteArray *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr get_fingerprint_sha1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_unique_id
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_unique_id
+		{
+			get
+			{
+				return this.Data.get_unique_id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_unique_id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_issuer_unique_id
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_issuer_unique_id
+		{
+			get
+			{
+				return this.Data.get_issuer_unique_id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_issuer_unique_id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_subject_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_subject_name
+		{
+			get
+			{
+				return this.Data.get_subject_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_subject_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: check_subject_name
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr check_subject_name
+		{
+			get
+			{
+				return this.Data.check_subject_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.check_subject_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_times
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr get_times
+		{
+			get
+			{
+				return this.Data.get_times;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_times = value;
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificateScheme
+	{
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * gchar * fullname
+		 */
+		public string fullname;
+
+		/*
+		 * PurpleCertificate * (*import_certificate)(gchar * filename)
+		 */
+		public IntPtr import_certificate;
+
+		/*
+		 * gboolean (*export_certificate)(gchar * filename, PurpleCertificate * crt)
+		 */
+		public IntPtr export_certificate;
+
+		/*
+		 * PurpleCertificate * (*copy_certificate)(PurpleCertificate * crt)
+		 */
+		public IntPtr copy_certificate;
+
+		/*
+		 * void (*destroy_certificate)(PurpleCertificate * crt)
+		 */
+		public IntPtr destroy_certificate;
+
+		/*
+		 * gboolean (*signed_by)(PurpleCertificate * crt, PurpleCertificate * issuer)
+		 */
+		public IntPtr signed_by;
+
+		/*
+		 * GByteArray * (*get_fingerprint_sha1)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_fingerprint_sha1;
+
+		/*
+		 * gchar * (*get_unique_id)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_unique_id;
+
+		/*
+		 * gchar * (*get_issuer_unique_id)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_issuer_unique_id;
+
+		/*
+		 * gchar * (*get_subject_name)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_subject_name;
+
+		/*
+		 * gboolean (*check_subject_name)(PurpleCertificate * crt, gchar * name)
+		 */
+		public IntPtr check_subject_name;
+
+		/*
+		 * gboolean (*get_times)(PurpleCertificate * crt, time_t * activation, time_t * expiration)
+		 */
+		public IntPtr get_times;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificateVerificationRequest.cs	cfcc9ffbf62088223b555f982dfb89033b618712
+++ libpurple/wrapper/PurpleCertificateVerificationRequest.cs	cfcc9ffbf62088223b555f982dfb89033b618712
@@ -0,0 +1,232 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificateVerificationRequest
+	 */
+	public class PurpleCertificateVerificationRequest : UnmanagedWrapper<_PurpleCertificateVerificationRequest>
+	{
+		public PurpleCertificateVerificationRequest()
+		{
+		}
+
+		public PurpleCertificateVerificationRequest(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificateVerificationRequest)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificateVerificationRequest));
+		}
+
+		/*
+		 * Argument Name: verifier
+		 * Argument Type: PurpleCertificateVerifier *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateVerifier verifier
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: scheme
+		 * Argument Type: PurpleCertificateScheme *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateScheme scheme
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: subject_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string subject_name
+		{
+			get
+			{
+				return this.Data.subject_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.subject_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: cert_chain
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleCertificateVerificationRequest.cert_chain in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cb
+		 * Argument Type: PurpleCertificateVerifiedCallback
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Certificate.PurpleCertificateVerifiedCallback cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cb_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr cb_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificateVerificationRequest
+	{
+		/*
+		 * PurpleCertificateVerifier * verifier
+		 */
+		public IntPtr verifier;
+
+		/*
+		 * PurpleCertificateScheme * scheme
+		 */
+		public IntPtr scheme;
+
+		/*
+		 * gchar * subject_name
+		 */
+		public string subject_name;
+
+		/*
+		 * GList * cert_chain
+		 */
+		public IntPtr cert_chain;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+		/*
+		 * PurpleCertificateVerifiedCallback cb
+		 */
+		public IntPtr cb;
+
+		/*
+		 * gpointer cb_data
+		 */
+		public IntPtr cb_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificateVerifier.cs	c224d405bbbc0870dd92b7f83dcc1bd42fa72c2f
+++ libpurple/wrapper/PurpleCertificateVerifier.cs	c224d405bbbc0870dd92b7f83dcc1bd42fa72c2f
@@ -0,0 +1,267 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificateVerifier
+	 */
+	public class PurpleCertificateVerifier : UnmanagedWrapper<_PurpleCertificateVerifier>
+	{
+		public PurpleCertificateVerifier()
+		{
+		}
+
+		public PurpleCertificateVerifier(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificateVerifier)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificateVerifier));
+		}
+
+		/*
+		 * Argument Name: scheme_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string scheme_name
+		{
+			get
+			{
+				return this.Data.scheme_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.scheme_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: start_verification
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr start_verification
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy_request
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy_request
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificateVerifier
+	{
+		/*
+		 * gchar * scheme_name
+		 */
+		public string scheme_name;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * void (*start_verification)(PurpleCertificateVerificationRequest * vrq)
+		 */
+		public IntPtr start_verification;
+
+		/*
+		 * void (*destroy_request)(PurpleCertificateVerificationRequest * vrq)
+		 */
+		public IntPtr destroy_request;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleChat.cs	7f9cb6dbfd1f9292b53cd6bb65e4bcc8c2be1268
+++ libpurple/wrapper/PurpleChat.cs	7f9cb6dbfd1f9292b53cd6bb65e4bcc8c2be1268
@@ -0,0 +1,150 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleChat
+	 */
+	public class PurpleChat : UnmanagedWrapper<_PurpleChat>
+	{
+		public PurpleChat()
+		{
+		}
+
+		public PurpleChat(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleChat)Marshal.PtrToStructure(this.Reference, typeof(_PurpleChat));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleChat.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: components
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleChat.components in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleChat
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleChat.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * GHashTable * components
+		 */
+		public IntPtr components;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCipherOps.cs	60d9c73757ad92643435345990521b9ddf2d70dd
+++ libpurple/wrapper/PurpleCipherOps.cs	60d9c73757ad92643435345990521b9ddf2d70dd
@@ -0,0 +1,517 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: cipher.h
+	 * Structure: PurpleCipherOps
+	 */
+	public class PurpleCipherOps : UnmanagedWrapper<_PurpleCipherOps>
+	{
+		public PurpleCipherOps()
+		{
+		}
+
+		public PurpleCipherOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCipherOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCipherOps));
+		}
+
+		/*
+		 * Argument Name: set_option
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_option
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_option
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr get_option
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: init
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr init
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reset
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr reset
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: uninit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr uninit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_iv
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_iv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: append
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr append
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: digest
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr digest
+		{
+			get
+			{
+				return this.Data.digest;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.digest = value;
+			}
+		}
+
+		/*
+		 * Argument Name: encrypt
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr encrypt
+		{
+			get
+			{
+				return this.Data.encrypt;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.encrypt = value;
+			}
+		}
+
+		/*
+		 * Argument Name: decrypt
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr decrypt
+		{
+			get
+			{
+				return this.Data.decrypt;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.decrypt = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_salt
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_salt
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_salt_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public IntPtr get_salt_size
+		{
+			get
+			{
+				return this.Data.get_salt_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_salt_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_key
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_key
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_key_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public IntPtr get_key_size
+		{
+			get
+			{
+				return this.Data.get_key_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_key_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_batch_mode
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_batch_mode
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_batch_mode
+		 * Argument Type: PurpleCipherBatchMode
+		 * Argument Category: KnownEnum
+		 */
+		public IntPtr get_batch_mode
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_block_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public IntPtr get_block_size
+		{
+			get
+			{
+				return this.Data.get_block_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_block_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_key_with_len
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_key_with_len
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCipherOps
+	{
+		/*
+		 * void (*set_option)(PurpleCipherContext * context, gchar * name, void * value)
+		 */
+		public IntPtr set_option;
+
+		/*
+		 * void * (*get_option)(PurpleCipherContext * context, gchar * name)
+		 */
+		public IntPtr get_option;
+
+		/*
+		 * void (*init)(PurpleCipherContext * context, void * extra)
+		 */
+		public IntPtr init;
+
+		/*
+		 * void (*reset)(PurpleCipherContext * context, void * extra)
+		 */
+		public IntPtr reset;
+
+		/*
+		 * void (*uninit)(PurpleCipherContext * context)
+		 */
+		public IntPtr uninit;
+
+		/*
+		 * void (*set_iv)(PurpleCipherContext * context, guchar * iv, size_t len)
+		 */
+		public IntPtr set_iv;
+
+		/*
+		 * void (*append)(PurpleCipherContext * context, guchar * data, size_t len)
+		 */
+		public IntPtr append;
+
+		/*
+		 * gboolean (*digest)(PurpleCipherContext * context, size_t in_len, guchar digest[], size_t * out_len)
+		 */
+		public IntPtr digest;
+
+		/*
+		 * int (*encrypt)(PurpleCipherContext * context, guchar data[], size_t len, guchar output[], size_t * outlen)
+		 */
+		public IntPtr encrypt;
+
+		/*
+		 * int (*decrypt)(PurpleCipherContext * context, guchar data[], size_t len, guchar output[], size_t * outlen)
+		 */
+		public IntPtr decrypt;
+
+		/*
+		 * void (*set_salt)(PurpleCipherContext * context, guchar * salt)
+		 */
+		public IntPtr set_salt;
+
+		/*
+		 * size_t (*get_salt_size)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_salt_size;
+
+		/*
+		 * void (*set_key)(PurpleCipherContext * context, guchar * key)
+		 */
+		public IntPtr set_key;
+
+		/*
+		 * size_t (*get_key_size)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_key_size;
+
+		/*
+		 * void (*set_batch_mode)(PurpleCipherContext * context, PurpleCipherBatchMode mode)
+		 */
+		public IntPtr set_batch_mode;
+
+		/*
+		 * PurpleCipherBatchMode (*get_batch_mode)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_batch_mode;
+
+		/*
+		 * size_t (*get_block_size)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_block_size;
+
+		/*
+		 * void (*set_key_with_len)(PurpleCipherContext * context, guchar * key, size_t len)
+		 */
+		public IntPtr set_key_with_len;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCircBuffer.cs	5c6f6f1f40ee9a090dfdd7c25fd68fb9ddd728b9
+++ libpurple/wrapper/PurpleCircBuffer.cs	5c6f6f1f40ee9a090dfdd7c25fd68fb9ddd728b9
@@ -0,0 +1,217 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: circbuffer.h
+	 * Structure: PurpleCircBuffer
+	 */
+	public class PurpleCircBuffer : UnmanagedWrapper<_PurpleCircBuffer>
+	{
+		public PurpleCircBuffer()
+		{
+		}
+
+		public PurpleCircBuffer(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCircBuffer)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCircBuffer));
+		}
+
+		/*
+		 * Argument Name: buffer
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string buffer
+		{
+			get
+			{
+				return this.Data.buffer;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buffer = value;
+			}
+		}
+
+		/*
+		 * Argument Name: growsize
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public ulong growsize
+		{
+			get
+			{
+				return this.Data.growsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.growsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buflen
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public ulong buflen
+		{
+			get
+			{
+				return this.Data.buflen;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buflen = value;
+			}
+		}
+
+		/*
+		 * Argument Name: bufused
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public ulong bufused
+		{
+			get
+			{
+				return this.Data.bufused;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.bufused = value;
+			}
+		}
+
+		/*
+		 * Argument Name: inptr
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string inptr
+		{
+			get
+			{
+				return this.Data.inptr;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.inptr = value;
+			}
+		}
+
+		/*
+		 * Argument Name: outptr
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string outptr
+		{
+			get
+			{
+				return this.Data.outptr;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.outptr = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCircBuffer
+	{
+		/*
+		 * gchar * buffer
+		 */
+		public string buffer;
+
+		/*
+		 * gsize growsize
+		 */
+		public ulong growsize;
+
+		/*
+		 * gsize buflen
+		 */
+		public ulong buflen;
+
+		/*
+		 * gsize bufused
+		 */
+		public ulong bufused;
+
+		/*
+		 * gchar * inptr
+		 */
+		public string inptr;
+
+		/*
+		 * gchar * outptr
+		 */
+		public string outptr;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleClient.cs	378a383b6cfd1ec7ba221ff96e0b3cb432a61c70
+++ libpurple/wrapper/PurpleClient.cs	378a383b6cfd1ec7ba221ff96e0b3cb432a61c70
@@ -0,0 +1,67 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: purple-client.h
+	 */
+	public class PurpleClient
+	{
+
+		/*
+		 * Function Name: purple_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_init();
+
+		public static void Init()
+		{
+			purple_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/PurpleConnection.cs	a8fe0dc9574fda9e65ce0d580ed12346f46b3053
+++ libpurple/wrapper/PurpleConnection.cs	a8fe0dc9574fda9e65ce0d580ed12346f46b3053
@@ -0,0 +1,382 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: connection.h
+	 * Structure: PurpleConnection
+	 */
+	public class PurpleConnection : UnmanagedWrapper<_PurpleConnection>
+	{
+		public PurpleConnection()
+		{
+		}
+
+		public PurpleConnection(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConnection)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConnection));
+		}
+
+		/*
+		 * Argument Name: prpl
+		 * Argument Type: PurplePlugin *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePlugin prpl
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleConnectionFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Connection.PurpleConnectionFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: state
+		 * Argument Type: PurpleConnectionState
+		 * Argument Category: KnownEnum
+		 */
+		public Connection.PurpleConnectionState state
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: password
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string password
+		{
+			get
+			{
+				return this.Data.password;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.password = value;
+			}
+		}
+
+		/*
+		 * Argument Name: inpa
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int inpa
+		{
+			get
+			{
+				return this.Data.inpa;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.inpa = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buddy_chats
+		 * Argument Type: GSList *
+		 * Argument Category: PointerToGSList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConnection.buddy_chats in file "connection.h".
+		 * Message: Unable to provide a type for GSList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: display_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string display_name
+		{
+			get
+			{
+				return this.Data.display_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.display_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: keepalive
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint keepalive
+		{
+			get
+			{
+				return this.Data.keepalive;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.keepalive = value;
+			}
+		}
+
+		/*
+		 * Argument Name: wants_to_die
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool wants_to_die
+		{
+			get
+			{
+				return this.Data.wants_to_die;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.wants_to_die = value;
+			}
+		}
+
+		/*
+		 * Argument Name: disconnect_timeout
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint disconnect_timeout
+		{
+			get
+			{
+				return this.Data.disconnect_timeout;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.disconnect_timeout = value;
+			}
+		}
+
+		/*
+		 * Argument Name: last_received
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime last_received
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConnection
+	{
+		/*
+		 * PurplePlugin * prpl
+		 */
+		public IntPtr prpl;
+
+		/*
+		 * PurpleConnectionFlags flags
+		 */
+		public Connection.PurpleConnectionFlags flags;
+
+		/*
+		 * PurpleConnectionState state
+		 */
+		public Connection.PurpleConnectionState state;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * password
+		 */
+		public string password;
+
+		/*
+		 * int inpa
+		 */
+		public int inpa;
+
+		/*
+		 * GSList * buddy_chats
+		 */
+		public IntPtr buddy_chats;
+
+		/*
+		 * void * proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * char * display_name
+		 */
+		public string display_name;
+
+		/*
+		 * guint keepalive
+		 */
+		public uint keepalive;
+
+		/*
+		 * gboolean wants_to_die
+		 */
+		public bool wants_to_die;
+
+		/*
+		 * guint disconnect_timeout
+		 */
+		public uint disconnect_timeout;
+
+		/*
+		 * time_t last_received
+		 */
+		public ulong last_received;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleContact.cs	e6c1bde12e225fb3fb721ed175a615023b31bb47
+++ libpurple/wrapper/PurpleContact.cs	e6c1bde12e225fb3fb721ed175a615023b31bb47
@@ -0,0 +1,235 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleContact
+	 */
+	public class PurpleContact : UnmanagedWrapper<_PurpleContact>
+	{
+		public PurpleContact()
+		{
+		}
+
+		public PurpleContact(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleContact)Marshal.PtrToStructure(this.Reference, typeof(_PurpleContact));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleContact.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: totalsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int totalsize
+		{
+			get
+			{
+				return this.Data.totalsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.totalsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: currentsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int currentsize
+		{
+			get
+			{
+				return this.Data.currentsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.currentsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: online
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int online
+		{
+			get
+			{
+				return this.Data.online;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.online = value;
+			}
+		}
+
+		/*
+		 * Argument Name: priority
+		 * Argument Type: PurpleBuddy *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBuddy priority
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priority_valid
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool priority_valid
+		{
+			get
+			{
+				return this.Data.priority_valid;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.priority_valid = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleContact
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleContact.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * int totalsize
+		 */
+		public int totalsize;
+
+		/*
+		 * int currentsize
+		 */
+		public int currentsize;
+
+		/*
+		 * int online
+		 */
+		public int online;
+
+		/*
+		 * PurpleBuddy * priority
+		 */
+		public IntPtr priority;
+
+		/*
+		 * gboolean priority_valid
+		 */
+		public bool priority_valid;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvChat.cs	6c9eb1aba2d75abba2142f895db04c77528842e3
+++ libpurple/wrapper/PurpleConvChat.cs	6c9eb1aba2d75abba2142f895db04c77528842e3
@@ -0,0 +1,247 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvChat
+	 */
+	public class PurpleConvChat : UnmanagedWrapper<_PurpleConvChat>
+	{
+		public PurpleConvChat()
+		{
+		}
+
+		public PurpleConvChat(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvChat)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvChat));
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: in_room
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConvChat.in_room in file "conversation.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ignored
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConvChat.ignored in file "conversation.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char  *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr who
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: topic
+		 * Argument Type: char  *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr topic
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: nick
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string nick
+		{
+			get
+			{
+				return this.Data.nick;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.nick = value;
+			}
+		}
+
+		/*
+		 * Argument Name: left
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool left
+		{
+			get
+			{
+				return this.Data.left;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.left = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvChat
+	{
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * GList * in_room
+		 */
+		public IntPtr in_room;
+
+		/*
+		 * GList * ignored
+		 */
+		public IntPtr ignored;
+
+		/*
+		 * char  * who
+		 */
+		public IntPtr who;
+
+		/*
+		 * char  * topic
+		 */
+		public IntPtr topic;
+
+		/*
+		 * int id
+		 */
+		public int id;
+
+		/*
+		 * char * nick
+		 */
+		public string nick;
+
+		/*
+		 * gboolean left
+		 */
+		public bool left;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvChatBuddy.cs	a70c61b3667a595fa30e0468d462b94f3707bf80
+++ libpurple/wrapper/PurpleConvChatBuddy.cs	a70c61b3667a595fa30e0468d462b94f3707bf80
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvChatBuddy
+	 */
+	public class PurpleConvChatBuddy : UnmanagedWrapper<_PurpleConvChatBuddy>
+	{
+		public PurpleConvChatBuddy()
+		{
+		}
+
+		public PurpleConvChatBuddy(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvChatBuddy)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvChatBuddy));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias_key
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias_key
+		{
+			get
+			{
+				return this.Data.alias_key;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias_key = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buddy
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool buddy
+		{
+			get
+			{
+				return this.Data.buddy;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buddy = value;
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleConvChatBuddyFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleConvChatBuddyFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvChatBuddy
+	{
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * char * alias_key
+		 */
+		public string alias_key;
+
+		/*
+		 * gboolean buddy
+		 */
+		public bool buddy;
+
+		/*
+		 * PurpleConvChatBuddyFlags flags
+		 */
+		public Conversation.PurpleConvChatBuddyFlags flags;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvIm.cs	841f60f7bc4a161f808f8fbd52c8ff78312fbec4
+++ libpurple/wrapper/PurpleConvIm.cs	841f60f7bc4a161f808f8fbd52c8ff78312fbec4
@@ -0,0 +1,217 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvIm
+	 */
+	public class PurpleConvIm : UnmanagedWrapper<_PurpleConvIm>
+	{
+		public PurpleConvIm()
+		{
+		}
+
+		public PurpleConvIm(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvIm)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvIm));
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: typing_state
+		 * Argument Type: PurpleTypingState
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleTypingState typing_state
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: typing_timeout
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint typing_timeout
+		{
+			get
+			{
+				return this.Data.typing_timeout;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.typing_timeout = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type_again
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime type_again
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_typed_timeout
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint send_typed_timeout
+		{
+			get
+			{
+				return this.Data.send_typed_timeout;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_typed_timeout = value;
+			}
+		}
+
+		/*
+		 * Argument Name: icon
+		 * Argument Type: PurpleBuddyIcon *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvIm
+	{
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * PurpleTypingState typing_state
+		 */
+		public Conversation.PurpleTypingState typing_state;
+
+		/*
+		 * guint typing_timeout
+		 */
+		public uint typing_timeout;
+
+		/*
+		 * time_t type_again
+		 */
+		public ulong type_again;
+
+		/*
+		 * guint send_typed_timeout
+		 */
+		public uint send_typed_timeout;
+
+		/*
+		 * PurpleBuddyIcon * icon
+		 */
+		public IntPtr icon;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvMessage.cs	b7b894d07dc0b25daa902a80f73f276f25e6513d
+++ libpurple/wrapper/PurpleConvMessage.cs	b7b894d07dc0b25daa902a80f73f276f25e6513d
@@ -0,0 +1,217 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvMessage
+	 */
+	public class PurpleConvMessage : UnmanagedWrapper<_PurpleConvMessage>
+	{
+		public PurpleConvMessage()
+		{
+		}
+
+		public PurpleConvMessage(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvMessage)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvMessage));
+		}
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string who
+		{
+			get
+			{
+				return this.Data.who;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.who = value;
+			}
+		}
+
+		/*
+		 * Argument Name: what
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string what
+		{
+			get
+			{
+				return this.Data.what;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.what = value;
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleMessageFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleMessageFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: when
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime when
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvMessage
+	{
+		/*
+		 * char * who
+		 */
+		public string who;
+
+		/*
+		 * char * what
+		 */
+		public string what;
+
+		/*
+		 * PurpleMessageFlags flags
+		 */
+		public Conversation.PurpleMessageFlags flags;
+
+		/*
+		 * time_t when
+		 */
+		public ulong when;
+
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConversation.cs	8a00b4fca90be368184fda439042d0ccbb29566b
+++ libpurple/wrapper/PurpleConversation.cs	8a00b4fca90be368184fda439042d0ccbb29566b
@@ -0,0 +1,279 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConversation
+	 */
+	public class PurpleConversation : UnmanagedWrapper<_PurpleConversation>
+	{
+		public PurpleConversation()
+		{
+		}
+
+		public PurpleConversation(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConversation)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConversation));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleConversationType
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleConversationType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: title
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string title
+		{
+			get
+			{
+				return this.Data.title;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.title = value;
+			}
+		}
+
+		/*
+		 * Argument Name: logging
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool logging
+		{
+			get
+			{
+				return this.Data.logging;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.logging = value;
+			}
+		}
+
+		/*
+		 * Argument Name: logs
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConversation.logs in file "conversation.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: {
+		PurpleConvIm   *im
+		 * Argument Type: union
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConversation.{
+		PurpleConvIm   *im in file "conversation.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: chat
+		 * Argument Type: PurpleConvChat *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConvChat chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: misc
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr misc
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConversation
+	{
+		/*
+		 * PurpleConversationType type
+		 */
+		public Conversation.PurpleConversationType type;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * title
+		 */
+		public string title;
+
+		/*
+		 * gboolean logging
+		 */
+		public bool logging;
+
+		/*
+		 * GList * logs
+		 */
+		public IntPtr logs;
+
+		/*
+		 * union {
+		PurpleConvIm   *im
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConversation.{
+		PurpleConvIm   *im in file "conversation.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * PurpleConvChat * chat
+		 */
+		public IntPtr chat;
+
+		/*
+		 * void * misc
+		 */
+		public IntPtr misc;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConversationUiOps.cs	e9ce7305ad865b0caa177922753415a170d5ff77
+++ libpurple/wrapper/PurpleConversationUiOps.cs	e9ce7305ad865b0caa177922753415a170d5ff77
@@ -0,0 +1,542 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConversationUiOps
+	 */
+	public class PurpleConversationUiOps : UnmanagedWrapper<_PurpleConversationUiOps>
+	{
+		public PurpleConversationUiOps()
+		{
+		}
+
+		public PurpleConversationUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConversationUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConversationUiOps));
+		}
+
+		/*
+		 * Argument Name: create_conversation
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create_conversation
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy_conversation
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy_conversation
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr write_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write_im
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr write_im
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write_conv
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr write_conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_add_users
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_add_users
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_rename_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_rename_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_remove_users
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_remove_users
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_update_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_update_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: present
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr present
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: has_focus
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr has_focus
+		{
+			get
+			{
+				return this.Data.has_focus;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.has_focus = value;
+			}
+		}
+
+		/*
+		 * Argument Name: custom_smiley_add
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr custom_smiley_add
+		{
+			get
+			{
+				return this.Data.custom_smiley_add;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.custom_smiley_add = value;
+			}
+		}
+
+		/*
+		 * Argument Name: custom_smiley_write
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr custom_smiley_write
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: custom_smiley_close
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr custom_smiley_close
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_confirm
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr send_confirm
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConversationUiOps
+	{
+		/*
+		 * void (*create_conversation)(PurpleConversation * conv)
+		 */
+		public IntPtr create_conversation;
+
+		/*
+		 * void (*destroy_conversation)(PurpleConversation * conv)
+		 */
+		public IntPtr destroy_conversation;
+
+		/*
+		 * void (*write_chat)(PurpleConversation * conv, char * who, char * message, PurpleMessageFlags flags, time_t mtime)
+		 */
+		public IntPtr write_chat;
+
+		/*
+		 * void (*write_im)(PurpleConversation * conv, char * who, char * message, PurpleMessageFlags flags, time_t mtime)
+		 */
+		public IntPtr write_im;
+
+		/*
+		 * void (*write_conv)(PurpleConversation * conv, char * name, char * alias, char * message, PurpleMessageFlags flags, time_t mtime)
+		 */
+		public IntPtr write_conv;
+
+		/*
+		 * void (*chat_add_users)(PurpleConversation * conv, GList * cbuddies, gboolean new_arrivals)
+		 */
+		public IntPtr chat_add_users;
+
+		/*
+		 * void (*chat_rename_user)(PurpleConversation * conv, char * old_name, char * new_name, char * new_alias)
+		 */
+		public IntPtr chat_rename_user;
+
+		/*
+		 * void (*chat_remove_users)(PurpleConversation * conv, GList * users)
+		 */
+		public IntPtr chat_remove_users;
+
+		/*
+		 * void (*chat_update_user)(PurpleConversation * conv, char * user)
+		 */
+		public IntPtr chat_update_user;
+
+		/*
+		 * void (*present)(PurpleConversation * conv)
+		 */
+		public IntPtr present;
+
+		/*
+		 * gboolean (*has_focus)(PurpleConversation * conv)
+		 */
+		public IntPtr has_focus;
+
+		/*
+		 * gboolean (*custom_smiley_add)(PurpleConversation * conv, char * smile, gboolean remote)
+		 */
+		public IntPtr custom_smiley_add;
+
+		/*
+		 * void (*custom_smiley_write)(PurpleConversation * conv, char * smile, guchar * data, gsize size)
+		 */
+		public IntPtr custom_smiley_write;
+
+		/*
+		 * void (*custom_smiley_close)(PurpleConversation * conv, char * smile)
+		 */
+		public IntPtr custom_smiley_close;
+
+		/*
+		 * void (*send_confirm)(PurpleConversation * conv, char * message)
+		 */
+		public IntPtr send_confirm;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleEventLoopUiOps.cs	4927f3cf427845d0cb130f9326e7001f9eca58eb
+++ libpurple/wrapper/PurpleEventLoopUiOps.cs	4927f3cf427845d0cb130f9326e7001f9eca58eb
@@ -0,0 +1,292 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: eventloop.h
+	 * Structure: PurpleEventLoopUiOps
+	 */
+	public class PurpleEventLoopUiOps : UnmanagedWrapper<_PurpleEventLoopUiOps>
+	{
+		public PurpleEventLoopUiOps()
+		{
+		}
+
+		public PurpleEventLoopUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleEventLoopUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleEventLoopUiOps));
+		}
+
+		/*
+		 * Argument Name: timeout_add
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public IntPtr timeout_add
+		{
+			get
+			{
+				return this.Data.timeout_add;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.timeout_add = value;
+			}
+		}
+
+		/*
+		 * Argument Name: timeout_remove
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr timeout_remove
+		{
+			get
+			{
+				return this.Data.timeout_remove;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.timeout_remove = value;
+			}
+		}
+
+		/*
+		 * Argument Name: input_add
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public IntPtr input_add
+		{
+			get
+			{
+				return this.Data.input_add;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.input_add = value;
+			}
+		}
+
+		/*
+		 * Argument Name: input_remove
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr input_remove
+		{
+			get
+			{
+				return this.Data.input_remove;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.input_remove = value;
+			}
+		}
+
+		/*
+		 * Argument Name: input_get_error
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr input_get_error
+		{
+			get
+			{
+				return this.Data.input_get_error;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.input_get_error = value;
+			}
+		}
+
+		/*
+		 * Argument Name: timeout_add_seconds
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public IntPtr timeout_add_seconds
+		{
+			get
+			{
+				return this.Data.timeout_add_seconds;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.timeout_add_seconds = value;
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleEventLoopUiOps
+	{
+		/*
+		 * guint (*timeout_add)(guint interval, GSourceFunc function, gpointer data)
+		 */
+		public IntPtr timeout_add;
+
+		/*
+		 * gboolean (*timeout_remove)(guint handle)
+		 */
+		public IntPtr timeout_remove;
+
+		/*
+		 * guint (*input_add)(int fd, PurpleInputCondition cond, PurpleInputFunction func, gpointer user_data)
+		 */
+		public IntPtr input_add;
+
+		/*
+		 * gboolean (*input_remove)(guint handle)
+		 */
+		public IntPtr input_remove;
+
+		/*
+		 * int (*input_get_error)(int fd, int * error)
+		 */
+		public IntPtr input_get_error;
+
+		/*
+		 * guint (*timeout_add_seconds)(guint interval, GSourceFunc function, gpointer data)
+		 */
+		public IntPtr timeout_add_seconds;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleGroup.cs	9feae08c2ab266df1677cdcc3463d6a18da5554a
+++ libpurple/wrapper/PurpleGroup.cs	9feae08c2ab266df1677cdcc3463d6a18da5554a
@@ -0,0 +1,185 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleGroup
+	 */
+	public class PurpleGroup : UnmanagedWrapper<_PurpleGroup>
+	{
+		public PurpleGroup()
+		{
+		}
+
+		public PurpleGroup(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleGroup)Marshal.PtrToStructure(this.Reference, typeof(_PurpleGroup));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleGroup.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: totalsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int totalsize
+		{
+			get
+			{
+				return this.Data.totalsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.totalsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: currentsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int currentsize
+		{
+			get
+			{
+				return this.Data.currentsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.currentsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: online
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int online
+		{
+			get
+			{
+				return this.Data.online;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.online = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleGroup
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleGroup.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * int totalsize
+		 */
+		public int totalsize;
+
+		/*
+		 * int currentsize
+		 */
+		public int currentsize;
+
+		/*
+		 * int online
+		 */
+		public int online;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleKeyValuePair.cs	649266ab2fbce3195c29737e1763d92a7834baec
+++ libpurple/wrapper/PurpleKeyValuePair.cs	649266ab2fbce3195c29737e1763d92a7834baec
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: util.h
+	 * Structure: PurpleKeyValuePair
+	 */
+	public class PurpleKeyValuePair : UnmanagedWrapper<_PurpleKeyValuePair>
+	{
+		public PurpleKeyValuePair()
+		{
+		}
+
+		public PurpleKeyValuePair(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleKeyValuePair)Marshal.PtrToStructure(this.Reference, typeof(_PurpleKeyValuePair));
+		}
+
+		/*
+		 * Argument Name: key
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string key
+		{
+			get
+			{
+				return this.Data.key;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.key = value;
+			}
+		}
+
+		/*
+		 * Argument Name: value
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr value
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleKeyValuePair
+	{
+		/*
+		 * gchar * key
+		 */
+		public string key;
+
+		/*
+		 * void * value
+		 */
+		public IntPtr value;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLog.cs	b199292fbde439a2fc30faf7a541b45488ea2781
+++ libpurple/wrapper/PurpleLog.cs	b199292fbde439a2fc30faf7a541b45488ea2781
@@ -0,0 +1,260 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLog
+	 */
+	public class PurpleLog : UnmanagedWrapper<_PurpleLog>
+	{
+		public PurpleLog()
+		{
+		}
+
+		public PurpleLog(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLog)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLog));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleLogType
+		 * Argument Category: KnownEnum
+		 */
+		public Log.PurpleLogType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: logger
+		 * Argument Type: PurpleLogLogger *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleLogLogger logger
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: logger_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr logger_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: tm *tm
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleLog.tm *tm in file "log.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLog
+	{
+		/*
+		 * PurpleLogType type
+		 */
+		public Log.PurpleLogType type;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * time_t time
+		 */
+		public ulong time;
+
+		/*
+		 * PurpleLogLogger * logger
+		 */
+		public IntPtr logger;
+
+		/*
+		 * void * logger_data
+		 */
+		public IntPtr logger_data;
+
+		/*
+		 * struct tm *tm
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleLog.tm *tm in file "log.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLogCommonLoggerData.cs	88a04e8494fceb66baf3ab1878ff808f3164f9cd
+++ libpurple/wrapper/PurpleLogCommonLoggerData.cs	88a04e8494fceb66baf3ab1878ff808f3164f9cd
@@ -0,0 +1,142 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLogCommonLoggerData
+	 */
+	public class PurpleLogCommonLoggerData : UnmanagedWrapper<_PurpleLogCommonLoggerData>
+	{
+		public PurpleLogCommonLoggerData()
+		{
+		}
+
+		public PurpleLogCommonLoggerData(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLogCommonLoggerData)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLogCommonLoggerData));
+		}
+
+		/*
+		 * Argument Name: path
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string path
+		{
+			get
+			{
+				return this.Data.path;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.path = value;
+			}
+		}
+
+		/*
+		 * Argument Name: file
+		 * Argument Type: FILE *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to FILE */ IntPtr file
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: extra_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr extra_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLogCommonLoggerData
+	{
+		/*
+		 * char * path
+		 */
+		public string path;
+
+		/*
+		 * FILE * file
+		 */
+		public IntPtr file;
+
+		/*
+		 * void * extra_data
+		 */
+		public IntPtr extra_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLogLogger.cs	2421a793f65179da3943b135916b561603f55b6d
+++ libpurple/wrapper/PurpleLogLogger.cs	2421a793f65179da3943b135916b561603f55b6d
@@ -0,0 +1,492 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLogLogger
+	 */
+	public class PurpleLogLogger : UnmanagedWrapper<_PurpleLogLogger>
+	{
+		public PurpleLogLogger()
+		{
+		}
+
+		public PurpleLogLogger(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLogLogger)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLogLogger));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: create
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public IntPtr write
+		{
+			get
+			{
+				return this.Data.write;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.write = value;
+			}
+		}
+
+		/*
+		 * Argument Name: finalize
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr finalize
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: list
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: read
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr read
+		{
+			get
+			{
+				return this.Data.read;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.read = value;
+			}
+		}
+
+		/*
+		 * Argument Name: size
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr size
+		{
+			get
+			{
+				return this.Data.size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: total_size
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr total_size
+		{
+			get
+			{
+				return this.Data.total_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.total_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: list_syslog
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr list_syslog
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_log_sets
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_log_sets
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr remove
+		{
+			get
+			{
+				return this.Data.remove;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remove = value;
+			}
+		}
+
+		/*
+		 * Argument Name: is_deletable
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr is_deletable
+		{
+			get
+			{
+				return this.Data.is_deletable;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.is_deletable = value;
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLogLogger
+	{
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * id
+		 */
+		public string id;
+
+		/*
+		 * void (*create)(PurpleLog * log)
+		 */
+		public IntPtr create;
+
+		/*
+		 * gsize (*write)(PurpleLog * log, PurpleMessageFlags type, char * from, time_t time, char * message)
+		 */
+		public IntPtr write;
+
+		/*
+		 * void (*finalize)(PurpleLog * log)
+		 */
+		public IntPtr finalize;
+
+		/*
+		 * GList * (*list)(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		public IntPtr list;
+
+		/*
+		 * char * (*read)(PurpleLog * log, PurpleLogReadFlags * flags)
+		 */
+		public IntPtr read;
+
+		/*
+		 * int (*size)(PurpleLog * log)
+		 */
+		public IntPtr size;
+
+		/*
+		 * int (*total_size)(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		public IntPtr total_size;
+
+		/*
+		 * GList * (*list_syslog)(PurpleAccount * account)
+		 */
+		public IntPtr list_syslog;
+
+		/*
+		 * void (*get_log_sets)(PurpleLogSetCallback cb, GHashTable * sets)
+		 */
+		public IntPtr get_log_sets;
+
+		/*
+		 * gboolean (*remove)(PurpleLog * log)
+		 */
+		public IntPtr remove;
+
+		/*
+		 * gboolean (*is_deletable)(PurpleLog * log)
+		 */
+		public IntPtr is_deletable;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLogSet.cs	eb6aee9232a158317e7b8a3f319db0a25be3495f
+++ libpurple/wrapper/PurpleLogSet.cs	eb6aee9232a158317e7b8a3f319db0a25be3495f
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLogSet
+	 */
+	public class PurpleLogSet : UnmanagedWrapper<_PurpleLogSet>
+	{
+		public PurpleLogSet()
+		{
+		}
+
+		public PurpleLogSet(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLogSet)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLogSet));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleLogType
+		 * Argument Category: KnownEnum
+		 */
+		public Log.PurpleLogType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: buddy
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool buddy
+		{
+			get
+			{
+				return this.Data.buddy;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buddy = value;
+			}
+		}
+
+		/*
+		 * Argument Name: normalized_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string normalized_name
+		{
+			get
+			{
+				return this.Data.normalized_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.normalized_name = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLogSet
+	{
+		/*
+		 * PurpleLogType type
+		 */
+		public Log.PurpleLogType type;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * gboolean buddy
+		 */
+		public bool buddy;
+
+		/*
+		 * char * normalized_name
+		 */
+		public string normalized_name;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleMenuAction.cs	39f52b4f5eee94195585367960eedfcf87a95ac3
+++ libpurple/wrapper/PurpleMenuAction.cs	39f52b4f5eee94195585367960eedfcf87a95ac3
@@ -0,0 +1,157 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: util.h
+	 * Structure: PurpleMenuAction
+	 */
+	public class PurpleMenuAction : UnmanagedWrapper<_PurpleMenuAction>
+	{
+		public PurpleMenuAction()
+		{
+		}
+
+		public PurpleMenuAction(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleMenuAction)Marshal.PtrToStructure(this.Reference, typeof(_PurpleMenuAction));
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: callback
+		 * Argument Type: PurpleCallback
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Signals.PurpleCallback callback
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: children
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleMenuAction.children in file "util.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleMenuAction
+	{
+		/*
+		 * char * label
+		 */
+		public string label;
+
+		/*
+		 * PurpleCallback callback
+		 */
+		public IntPtr callback;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+		/*
+		 * GList * children
+		 */
+		public IntPtr children;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePlugin.cs	1b8cdaefe57c5b251f0e22112df3af05c696fbda
+++ libpurple/wrapper/PurplePlugin.cs	1b8cdaefe57c5b251f0e22112df3af05c696fbda
@@ -0,0 +1,407 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePlugin
+	 */
+	public class PurplePlugin : UnmanagedWrapper<_PurplePlugin>
+	{
+		public PurplePlugin()
+		{
+		}
+
+		public PurplePlugin(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePlugin)Marshal.PtrToStructure(this.Reference, typeof(_PurplePlugin));
+		}
+
+		/*
+		 * Argument Name: native_plugin
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool native_plugin
+		{
+			get
+			{
+				return this.Data.native_plugin;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.native_plugin = value;
+			}
+		}
+
+		/*
+		 * Argument Name: loaded
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool loaded
+		{
+			get
+			{
+				return this.Data.loaded;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.loaded = value;
+			}
+		}
+
+		/*
+		 * Argument Name: handle
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr handle
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: path
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string path
+		{
+			get
+			{
+				return this.Data.path;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.path = value;
+			}
+		}
+
+		/*
+		 * Argument Name: info
+		 * Argument Type: PurplePluginInfo *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePluginInfo info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: error
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string error
+		{
+			get
+			{
+				return this.Data.error;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.error = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ipc_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ipc_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: extra
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr extra
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: unloadable
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool unloadable
+		{
+			get
+			{
+				return this.Data.unloadable;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.unloadable = value;
+			}
+		}
+
+		/*
+		 * Argument Name: dependent_plugins
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePlugin.dependent_plugins in file "plugin.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePlugin
+	{
+		/*
+		 * gboolean native_plugin
+		 */
+		public bool native_plugin;
+
+		/*
+		 * gboolean loaded
+		 */
+		public bool loaded;
+
+		/*
+		 * void * handle
+		 */
+		public IntPtr handle;
+
+		/*
+		 * char * path
+		 */
+		public string path;
+
+		/*
+		 * PurplePluginInfo * info
+		 */
+		public IntPtr info;
+
+		/*
+		 * char * error
+		 */
+		public string error;
+
+		/*
+		 * void * ipc_data
+		 */
+		public IntPtr ipc_data;
+
+		/*
+		 * void * extra
+		 */
+		public IntPtr extra;
+
+		/*
+		 * gboolean unloadable
+		 */
+		public bool unloadable;
+
+		/*
+		 * GList * dependent_plugins
+		 */
+		public IntPtr dependent_plugins;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginAction.cs	c23c593c1b94481249493b06be0dc43110f53a69
+++ libpurple/wrapper/PurplePluginAction.cs	c23c593c1b94481249493b06be0dc43110f53a69
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginAction
+	 */
+	public class PurplePluginAction : UnmanagedWrapper<_PurplePluginAction>
+	{
+		public PurplePluginAction()
+		{
+		}
+
+		public PurplePluginAction(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginAction)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginAction));
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: callback
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr callback
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: plugin
+		 * Argument Type: PurplePlugin *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePlugin plugin
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: context
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr context
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: user_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr user_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginAction
+	{
+		/*
+		 * char * label
+		 */
+		public string label;
+
+		/*
+		 * void (*callback)(PurplePluginAction * )
+		 */
+		public IntPtr callback;
+
+		/*
+		 * PurplePlugin * plugin
+		 */
+		public IntPtr plugin;
+
+		/*
+		 * gpointer context
+		 */
+		public IntPtr context;
+
+		/*
+		 * gpointer user_data
+		 */
+		public IntPtr user_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginInfo.cs	9a408ea041350f74d326286f73cd246ee5c4d062
+++ libpurple/wrapper/PurplePluginInfo.cs	9a408ea041350f74d326286f73cd246ee5c4d062
@@ -0,0 +1,707 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginInfo
+	 */
+	public class PurplePluginInfo : UnmanagedWrapper<_PurplePluginInfo>
+	{
+		public PurplePluginInfo()
+		{
+		}
+
+		public PurplePluginInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginInfo));
+		}
+
+		/*
+		 * Argument Name: magic
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public uint magic
+		{
+			get
+			{
+				return this.Data.magic;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.magic = value;
+			}
+		}
+
+		/*
+		 * Argument Name: major_version
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public uint major_version
+		{
+			get
+			{
+				return this.Data.major_version;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.major_version = value;
+			}
+		}
+
+		/*
+		 * Argument Name: minor_version
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public uint minor_version
+		{
+			get
+			{
+				return this.Data.minor_version;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.minor_version = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurplePluginType
+		 * Argument Category: KnownEnum
+		 */
+		public Plugin.PurplePluginType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ui_requirement
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string ui_requirement
+		{
+			get
+			{
+				return this.Data.ui_requirement;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ui_requirement = value;
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: unsigned long
+		 * Argument Category: Native
+		 */
+		public ulong flags
+		{
+			get
+			{
+				return this.Data.flags;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.flags = value;
+			}
+		}
+
+		/*
+		 * Argument Name: dependencies
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginInfo.dependencies in file "plugin.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: priority
+		 * Argument Type: PurplePluginPriority
+		 * Argument Category: Native
+		 */
+		public int priority
+		{
+			get
+			{
+				return this.Data.priority;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.priority = value;
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: version
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string version
+		{
+			get
+			{
+				return this.Data.version;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.version = value;
+			}
+		}
+
+		/*
+		 * Argument Name: summary
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string summary
+		{
+			get
+			{
+				return this.Data.summary;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.summary = value;
+			}
+		}
+
+		/*
+		 * Argument Name: description
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string description
+		{
+			get
+			{
+				return this.Data.description;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.description = value;
+			}
+		}
+
+		/*
+		 * Argument Name: author
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string author
+		{
+			get
+			{
+				return this.Data.author;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.author = value;
+			}
+		}
+
+		/*
+		 * Argument Name: homepage
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string homepage
+		{
+			get
+			{
+				return this.Data.homepage;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.homepage = value;
+			}
+		}
+
+		/*
+		 * Argument Name: load
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr load
+		{
+			get
+			{
+				return this.Data.load;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.load = value;
+			}
+		}
+
+		/*
+		 * Argument Name: unload
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr unload
+		{
+			get
+			{
+				return this.Data.unload;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.unload = value;
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ui_info
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: extra_info
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr extra_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: prefs_info
+		 * Argument Type: PurplePluginUiInfo *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePluginUiInfo prefs_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: actions
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr actions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginInfo
+	{
+		/*
+		 * unsigned int magic
+		 */
+		public uint magic;
+
+		/*
+		 * unsigned int major_version
+		 */
+		public uint major_version;
+
+		/*
+		 * unsigned int minor_version
+		 */
+		public uint minor_version;
+
+		/*
+		 * PurplePluginType type
+		 */
+		public Plugin.PurplePluginType type;
+
+		/*
+		 * char * ui_requirement
+		 */
+		public string ui_requirement;
+
+		/*
+		 * unsigned long flags
+		 */
+		public ulong flags;
+
+		/*
+		 * GList * dependencies
+		 */
+		public IntPtr dependencies;
+
+		/*
+		 * PurplePluginPriority priority
+		 */
+		public int priority;
+
+		/*
+		 * char * id
+		 */
+		public string id;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * version
+		 */
+		public string version;
+
+		/*
+		 * char * summary
+		 */
+		public string summary;
+
+		/*
+		 * char * description
+		 */
+		public string description;
+
+		/*
+		 * char * author
+		 */
+		public string author;
+
+		/*
+		 * char * homepage
+		 */
+		public string homepage;
+
+		/*
+		 * gboolean (*load)(PurplePlugin * plugin)
+		 */
+		public IntPtr load;
+
+		/*
+		 * gboolean (*unload)(PurplePlugin * plugin)
+		 */
+		public IntPtr unload;
+
+		/*
+		 * void (*destroy)(PurplePlugin * plugin)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void * ui_info
+		 */
+		public IntPtr ui_info;
+
+		/*
+		 * void * extra_info
+		 */
+		public IntPtr extra_info;
+
+		/*
+		 * PurplePluginUiInfo * prefs_info
+		 */
+		public IntPtr prefs_info;
+
+		/*
+		 * GList * (*actions)(PurplePlugin * plugin, gpointer context)
+		 */
+		public IntPtr actions;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginLoaderInfo.cs	2bbbf5a587fe384be8976e0bae6d9f5bcf8049af
+++ libpurple/wrapper/PurplePluginLoaderInfo.cs	2bbbf5a587fe384be8976e0bae6d9f5bcf8049af
@@ -0,0 +1,282 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginLoaderInfo
+	 */
+	public class PurplePluginLoaderInfo : UnmanagedWrapper<_PurplePluginLoaderInfo>
+	{
+		public PurplePluginLoaderInfo()
+		{
+		}
+
+		public PurplePluginLoaderInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginLoaderInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginLoaderInfo));
+		}
+
+		/*
+		 * Argument Name: exts
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginLoaderInfo.exts in file "plugin.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: probe
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr probe
+		{
+			get
+			{
+				return this.Data.probe;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.probe = value;
+			}
+		}
+
+		/*
+		 * Argument Name: load
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr load
+		{
+			get
+			{
+				return this.Data.load;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.load = value;
+			}
+		}
+
+		/*
+		 * Argument Name: unload
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr unload
+		{
+			get
+			{
+				return this.Data.unload;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.unload = value;
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginLoaderInfo
+	{
+		/*
+		 * GList * exts
+		 */
+		public IntPtr exts;
+
+		/*
+		 * gboolean (*probe)(PurplePlugin * plugin)
+		 */
+		public IntPtr probe;
+
+		/*
+		 * gboolean (*load)(PurplePlugin * plugin)
+		 */
+		public IntPtr load;
+
+		/*
+		 * gboolean (*unload)(PurplePlugin * plugin)
+		 */
+		public IntPtr unload;
+
+		/*
+		 * void (*destroy)(PurplePlugin * plugin)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginProtocolInfo.cs	52047447980ddc0a97a6b6e430482bb2309c214f
+++ libpurple/wrapper/PurplePluginProtocolInfo.cs	52047447980ddc0a97a6b6e430482bb2309c214f
@@ -0,0 +1,1765 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 * Structure: PurplePluginProtocolInfo
+	 */
+	public class PurplePluginProtocolInfo : UnmanagedWrapper<_PurplePluginProtocolInfo>
+	{
+		public PurplePluginProtocolInfo()
+		{
+		}
+
+		public PurplePluginProtocolInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginProtocolInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginProtocolInfo));
+		}
+
+		/*
+		 * Argument Name: options
+		 * Argument Type: PurpleProtocolOptions
+		 * Argument Category: KnownEnum
+		 */
+		public Prpl.PurpleProtocolOptions options
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: user_splits
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.user_splits in file "prpl.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: protocol_options
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.protocol_options in file "prpl.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: icon_spec
+		 * Argument Type: PurpleBuddyIconSpec
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.icon_spec in file "prpl.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBuddyIconSpec icon_spec).
+		 */
+
+		/*
+		 * Argument Name: list_icon
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr list_icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: list_emblem
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr list_emblem
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_text
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr status_text
+		{
+			get
+			{
+				return this.Data.status_text;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.status_text = value;
+			}
+		}
+
+		/*
+		 * Argument Name: tooltip_text
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr tooltip_text
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_types
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr status_types
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: blist_node_menu
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr blist_node_menu
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_info
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr chat_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_info_defaults
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		public IntPtr chat_info_defaults
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: login
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr login
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: close
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr close
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_im
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr send_im
+		{
+			get
+			{
+				return this.Data.send_im;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_im = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_info
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_typing
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public IntPtr send_typing
+		{
+			get
+			{
+				return this.Data.send_typing;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_typing = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_info
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_status
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_status
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_idle
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_idle
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: change_passwd
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr change_passwd
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_buddies
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_buddies
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove_buddies
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove_buddies
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_permit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_permit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_deny
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: rem_permit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr rem_permit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: rem_deny
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr rem_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_permit_deny
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_permit_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: join_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr join_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reject_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr reject_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_chat_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_chat_name
+		{
+			get
+			{
+				return this.Data.get_chat_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_chat_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: chat_invite
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_invite
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_leave
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_leave
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_whisper
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_whisper
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_send
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr chat_send
+		{
+			get
+			{
+				return this.Data.chat_send;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.chat_send = value;
+			}
+		}
+
+		/*
+		 * Argument Name: keepalive
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr keepalive
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: register_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr register_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_cb_info
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_cb_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_cb_away
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_cb_away
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: alias_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr alias_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: group_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr group_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: rename_group
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr rename_group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: buddy_free
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr buddy_free
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: convo_closed
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr convo_closed
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: normalize
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr normalize
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_buddy_icon
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_buddy_icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove_group
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove_group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_cb_real_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_cb_real_name
+		{
+			get
+			{
+				return this.Data.get_cb_real_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_cb_real_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_chat_topic
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_chat_topic
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: find_blist_chat
+		 * Argument Type: PurpleChat *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr find_blist_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_get_list
+		 * Argument Type: PurpleRoomlist *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr roomlist_get_list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_cancel
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr roomlist_cancel
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_expand_category
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr roomlist_expand_category
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: can_receive_file
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr can_receive_file
+		{
+			get
+			{
+				return this.Data.can_receive_file;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.can_receive_file = value;
+			}
+		}
+
+		/*
+		 * Argument Name: send_file
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr send_file
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: new_xfer
+		 * Argument Type: PurpleXfer *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr new_xfer
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: offline_message
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr offline_message
+		{
+			get
+			{
+				return this.Data.offline_message;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.offline_message = value;
+			}
+		}
+
+		/*
+		 * Argument Name: whiteboard_prpl_ops
+		 * Argument Type: PurpleWhiteboardPrplOps *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleWhiteboardPrplOps whiteboard_prpl_ops
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_raw
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr send_raw
+		{
+			get
+			{
+				return this.Data.send_raw;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_raw = value;
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_room_serialize
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr roomlist_room_serialize
+		{
+			get
+			{
+				return this.Data.roomlist_room_serialize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.roomlist_room_serialize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: unregister_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr unregister_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_attention
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr send_attention
+		{
+			get
+			{
+				return this.Data.send_attention;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_attention = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_attention_types
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr get_attention_types
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: struct_size
+		 * Argument Type: unsigned long
+		 * Argument Category: Native
+		 */
+		public ulong struct_size
+		{
+			get
+			{
+				return this.Data.struct_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.struct_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_account_text_table
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		public IntPtr get_account_text_table
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: initiate_media
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr initiate_media
+		{
+			get
+			{
+				return this.Data.initiate_media;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.initiate_media = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_media_caps
+		 * Argument Type: PurpleMediaCaps
+		 * Argument Category: KnownEnum
+		 */
+		public IntPtr get_media_caps
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginProtocolInfo
+	{
+		/*
+		 * PurpleProtocolOptions options
+		 */
+		public Prpl.PurpleProtocolOptions options;
+
+		/*
+		 * GList * user_splits
+		 */
+		public IntPtr user_splits;
+
+		/*
+		 * GList * protocol_options
+		 */
+		public IntPtr protocol_options;
+
+		/*
+		 * PurpleBuddyIconSpec icon_spec
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.icon_spec in file "prpl.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBuddyIconSpec icon_spec).
+		 */
+
+		/*
+		 * const char * (*list_icon)(PurpleAccount * account, PurpleBuddy * buddy)
+		 */
+		public IntPtr list_icon;
+
+		/*
+		 * const char * (*list_emblem)(PurpleBuddy * buddy)
+		 */
+		public IntPtr list_emblem;
+
+		/*
+		 * char * (*status_text)(PurpleBuddy * buddy)
+		 */
+		public IntPtr status_text;
+
+		/*
+		 * void (*tooltip_text)(PurpleBuddy * buddy, PurpleNotifyUserInfo * user_info, gboolean full)
+		 */
+		public IntPtr tooltip_text;
+
+		/*
+		 * GList * (*status_types)(PurpleAccount * account)
+		 */
+		public IntPtr status_types;
+
+		/*
+		 * GList * (*blist_node_menu)(PurpleBlistNode * node)
+		 */
+		public IntPtr blist_node_menu;
+
+		/*
+		 * GList * (*chat_info)(PurpleConnection * )
+		 */
+		public IntPtr chat_info;
+
+		/*
+		 * GHashTable * (*chat_info_defaults)(PurpleConnection * , char * chat_name)
+		 */
+		public IntPtr chat_info_defaults;
+
+		/*
+		 * void (*login)(PurpleAccount * )
+		 */
+		public IntPtr login;
+
+		/*
+		 * void (*close)(PurpleConnection * )
+		 */
+		public IntPtr close;
+
+		/*
+		 * int (*send_im)(PurpleConnection * , char * who, char * message, PurpleMessageFlags flags)
+		 */
+		public IntPtr send_im;
+
+		/*
+		 * void (*set_info)(PurpleConnection * , char * info)
+		 */
+		public IntPtr set_info;
+
+		/*
+		 * unsigned int (*send_typing)(PurpleConnection * , char * name, PurpleTypingState state)
+		 */
+		public IntPtr send_typing;
+
+		/*
+		 * void (*get_info)(PurpleConnection * , char * who)
+		 */
+		public IntPtr get_info;
+
+		/*
+		 * void (*set_status)(PurpleAccount * account, PurpleStatus * status)
+		 */
+		public IntPtr set_status;
+
+		/*
+		 * void (*set_idle)(PurpleConnection * , int idletime)
+		 */
+		public IntPtr set_idle;
+
+		/*
+		 * void (*change_passwd)(PurpleConnection * , char * old_pass, char * new_pass)
+		 */
+		public IntPtr change_passwd;
+
+		/*
+		 * void (*add_buddy)(PurpleConnection * , PurpleBuddy * buddy, PurpleGroup * group)
+		 */
+		public IntPtr add_buddy;
+
+		/*
+		 * void (*add_buddies)(PurpleConnection * , GList * buddies, GList * groups)
+		 */
+		public IntPtr add_buddies;
+
+		/*
+		 * void (*remove_buddy)(PurpleConnection * , PurpleBuddy * buddy, PurpleGroup * group)
+		 */
+		public IntPtr remove_buddy;
+
+		/*
+		 * void (*remove_buddies)(PurpleConnection * , GList * buddies, GList * groups)
+		 */
+		public IntPtr remove_buddies;
+
+		/*
+		 * void (*add_permit)(PurpleConnection * , char * name)
+		 */
+		public IntPtr add_permit;
+
+		/*
+		 * void (*add_deny)(PurpleConnection * , char * name)
+		 */
+		public IntPtr add_deny;
+
+		/*
+		 * void (*rem_permit)(PurpleConnection * , char * name)
+		 */
+		public IntPtr rem_permit;
+
+		/*
+		 * void (*rem_deny)(PurpleConnection * , char * name)
+		 */
+		public IntPtr rem_deny;
+
+		/*
+		 * void (*set_permit_deny)(PurpleConnection * )
+		 */
+		public IntPtr set_permit_deny;
+
+		/*
+		 * void (*join_chat)(PurpleConnection * , GHashTable * components)
+		 */
+		public IntPtr join_chat;
+
+		/*
+		 * void (*reject_chat)(PurpleConnection * , GHashTable * components)
+		 */
+		public IntPtr reject_chat;
+
+		/*
+		 * char * (*get_chat_name)(GHashTable * components)
+		 */
+		public IntPtr get_chat_name;
+
+		/*
+		 * void (*chat_invite)(PurpleConnection * , int id, char * message, char * who)
+		 */
+		public IntPtr chat_invite;
+
+		/*
+		 * void (*chat_leave)(PurpleConnection * , int id)
+		 */
+		public IntPtr chat_leave;
+
+		/*
+		 * void (*chat_whisper)(PurpleConnection * , int id, char * who, char * message)
+		 */
+		public IntPtr chat_whisper;
+
+		/*
+		 * int (*chat_send)(PurpleConnection * , int id, char * message, PurpleMessageFlags flags)
+		 */
+		public IntPtr chat_send;
+
+		/*
+		 * void (*keepalive)(PurpleConnection * )
+		 */
+		public IntPtr keepalive;
+
+		/*
+		 * void (*register_user)(PurpleAccount * )
+		 */
+		public IntPtr register_user;
+
+		/*
+		 * void (*get_cb_info)(PurpleConnection * ,  , char * who)
+		 */
+		public IntPtr get_cb_info;
+
+		/*
+		 * void (*get_cb_away)(PurpleConnection * ,  , char * who)
+		 */
+		public IntPtr get_cb_away;
+
+		/*
+		 * void (*alias_buddy)(PurpleConnection * , char * who, char * alias)
+		 */
+		public IntPtr alias_buddy;
+
+		/*
+		 * void (*group_buddy)(PurpleConnection * , char * who, char * old_group, char * new_group)
+		 */
+		public IntPtr group_buddy;
+
+		/*
+		 * void (*rename_group)(PurpleConnection * , char * old_name, PurpleGroup * group, GList * moved_buddies)
+		 */
+		public IntPtr rename_group;
+
+		/*
+		 * void (*buddy_free)(PurpleBuddy * )
+		 */
+		public IntPtr buddy_free;
+
+		/*
+		 * void (*convo_closed)(PurpleConnection * , char * who)
+		 */
+		public IntPtr convo_closed;
+
+		/*
+		 * const char * (*normalize)(PurpleAccount * , char * who)
+		 */
+		public IntPtr normalize;
+
+		/*
+		 * void (*set_buddy_icon)(PurpleConnection * , PurpleStoredImage * img)
+		 */
+		public IntPtr set_buddy_icon;
+
+		/*
+		 * void (*remove_group)(PurpleConnection * gc, PurpleGroup * group)
+		 */
+		public IntPtr remove_group;
+
+		/*
+		 * char * (*get_cb_real_name)(PurpleConnection * gc, int id, char * who)
+		 */
+		public IntPtr get_cb_real_name;
+
+		/*
+		 * void (*set_chat_topic)(PurpleConnection * gc, int id, char * topic)
+		 */
+		public IntPtr set_chat_topic;
+
+		/*
+		 * PurpleChat * (*find_blist_chat)(PurpleAccount * account, char * name)
+		 */
+		public IntPtr find_blist_chat;
+
+		/*
+		 * PurpleRoomlist * (*roomlist_get_list)(PurpleConnection * gc)
+		 */
+		public IntPtr roomlist_get_list;
+
+		/*
+		 * void (*roomlist_cancel)(PurpleRoomlist * list)
+		 */
+		public IntPtr roomlist_cancel;
+
+		/*
+		 * void (*roomlist_expand_category)(PurpleRoomlist * list, PurpleRoomlistRoom * category)
+		 */
+		public IntPtr roomlist_expand_category;
+
+		/*
+		 * gboolean (*can_receive_file)(PurpleConnection * , char * who)
+		 */
+		public IntPtr can_receive_file;
+
+		/*
+		 * void (*send_file)(PurpleConnection * , char * who, char * filename)
+		 */
+		public IntPtr send_file;
+
+		/*
+		 * PurpleXfer * (*new_xfer)(PurpleConnection * , char * who)
+		 */
+		public IntPtr new_xfer;
+
+		/*
+		 * gboolean (*offline_message)(PurpleBuddy * buddy)
+		 */
+		public IntPtr offline_message;
+
+		/*
+		 * PurpleWhiteboardPrplOps * whiteboard_prpl_ops
+		 */
+		public IntPtr whiteboard_prpl_ops;
+
+		/*
+		 * int (*send_raw)(PurpleConnection * gc, char * buf, int len)
+		 */
+		public IntPtr send_raw;
+
+		/*
+		 * char * (*roomlist_room_serialize)(PurpleRoomlistRoom * room)
+		 */
+		public IntPtr roomlist_room_serialize;
+
+		/*
+		 * void (*unregister_user)(PurpleAccount * , PurpleAccountUnregistrationCb cb, void * user_data)
+		 */
+		public IntPtr unregister_user;
+
+		/*
+		 * gboolean (*send_attention)(PurpleConnection * gc, char * username, guint type)
+		 */
+		public IntPtr send_attention;
+
+		/*
+		 * GList * (*get_attention_types)(PurpleAccount * acct)
+		 */
+		public IntPtr get_attention_types;
+
+		/*
+		 * unsigned long struct_size
+		 */
+		public ulong struct_size;
+
+		/*
+		 * GHashTable * (*get_account_text_table)(PurpleAccount * account)
+		 */
+		public IntPtr get_account_text_table;
+
+		/*
+		 * gboolean (*initiate_media)(PurpleAccount * account, char * who, PurpleMediaSessionType type)
+		 */
+		public IntPtr initiate_media;
+
+		/*
+		 * PurpleMediaCaps (*get_media_caps)(PurpleAccount * account, char * who)
+		 */
+		public IntPtr get_media_caps;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginUiInfo.cs	28cfac5c4ea61cf4127818102c78c370eb891d8e
+++ libpurple/wrapper/PurplePluginUiInfo.cs	28cfac5c4ea61cf4127818102c78c370eb891d8e
@@ -0,0 +1,242 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginUiInfo
+	 */
+	public class PurplePluginUiInfo : UnmanagedWrapper<_PurplePluginUiInfo>
+	{
+		public PurplePluginUiInfo()
+		{
+		}
+
+		public PurplePluginUiInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginUiInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginUiInfo));
+		}
+
+		/*
+		 * Argument Name: get_plugin_pref_frame
+		 * Argument Type: PurplePluginPrefFrame *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr get_plugin_pref_frame
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: page_num
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int page_num
+		{
+			get
+			{
+				return this.Data.page_num;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.page_num = value;
+			}
+		}
+
+		/*
+		 * Argument Name: frame
+		 * Argument Type: PurplePluginPrefFrame *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr frame
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginUiInfo
+	{
+		/*
+		 * PurplePluginPrefFrame * (*get_plugin_pref_frame)(PurplePlugin * plugin)
+		 */
+		public IntPtr get_plugin_pref_frame;
+
+		/*
+		 * int page_num
+		 */
+		public int page_num;
+
+		/*
+		 * PurplePluginPrefFrame * frame
+		 */
+		public IntPtr frame;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePounce.cs	be78ae6afcc02e9e5f588727ddeff22d5c13c185
+++ libpurple/wrapper/PurplePounce.cs	be78ae6afcc02e9e5f588727ddeff22d5c13c185
@@ -0,0 +1,257 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: pounce.h
+	 * Structure: PurplePounce
+	 */
+	public class PurplePounce : UnmanagedWrapper<_PurplePounce>
+	{
+		public PurplePounce()
+		{
+		}
+
+		public PurplePounce(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePounce)Marshal.PtrToStructure(this.Reference, typeof(_PurplePounce));
+		}
+
+		/*
+		 * Argument Name: ui_type
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string ui_type
+		{
+			get
+			{
+				return this.Data.ui_type;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ui_type = value;
+			}
+		}
+
+		/*
+		 * Argument Name: events
+		 * Argument Type: PurplePounceEvent
+		 * Argument Category: KnownEnum
+		 */
+		public Pounce.PurplePounceEvent events
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: options
+		 * Argument Type: PurplePounceOption
+		 * Argument Category: KnownEnum
+		 */
+		public Pounce.PurplePounceOption options
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: pouncer
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount pouncer
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: pouncee
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string pouncee
+		{
+			get
+			{
+				return this.Data.pouncee;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.pouncee = value;
+			}
+		}
+
+		/*
+		 * Argument Name: actions
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePounce.actions in file "pounce.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: save
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool save
+		{
+			get
+			{
+				return this.Data.save;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.save = value;
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePounce
+	{
+		/*
+		 * char * ui_type
+		 */
+		public string ui_type;
+
+		/*
+		 * PurplePounceEvent events
+		 */
+		public Pounce.PurplePounceEvent events;
+
+		/*
+		 * PurplePounceOption options
+		 */
+		public Pounce.PurplePounceOption options;
+
+		/*
+		 * PurpleAccount * pouncer
+		 */
+		public IntPtr pouncer;
+
+		/*
+		 * char * pouncee
+		 */
+		public string pouncee;
+
+		/*
+		 * GHashTable * actions
+		 */
+		public IntPtr actions;
+
+		/*
+		 * gboolean save
+		 */
+		public bool save;
+
+		/*
+		 * void * data
+		 */
+		public IntPtr data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRequestField.cs	64b2a748ba228a4abc2569bef834ee19e2b14100
+++ libpurple/wrapper/PurpleRequestField.cs	64b2a748ba228a4abc2569bef834ee19e2b14100
@@ -0,0 +1,372 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: request.h
+	 * Structure: PurpleRequestField
+	 */
+	public class PurpleRequestField : UnmanagedWrapper<_PurpleRequestField>
+	{
+		public PurpleRequestField()
+		{
+		}
+
+		public PurpleRequestField(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRequestField)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRequestField));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleRequestFieldType
+		 * Argument Category: KnownEnum
+		 */
+		public Request.PurpleRequestFieldType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: group
+		 * Argument Type: PurpleRequestFieldGroup *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type_hint
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string type_hint
+		{
+			get
+			{
+				return this.Data.type_hint;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.type_hint = value;
+			}
+		}
+
+		/*
+		 * Argument Name: visible
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool visible
+		{
+			get
+			{
+				return this.Data.visible;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.visible = value;
+			}
+		}
+
+		/*
+		 * Argument Name: required
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool required
+		{
+			get
+			{
+				return this.Data.required;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.required = value;
+			}
+		}
+
+		/*
+		 * Argument Name: {
+		struct
+		{
+			gboolean multiline
+		 * Argument Type: union
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRequestField.{
+		struct
+		{
+			gboolean multiline in file "request.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: masked
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool masked
+		{
+			get
+			{
+				return this.Data.masked;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.masked = value;
+			}
+		}
+
+		/*
+		 * Argument Name: editable
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool editable
+		{
+			get
+			{
+				return this.Data.editable;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.editable = value;
+			}
+		}
+
+		/*
+		 * Argument Name: default_value
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string default_value
+		{
+			get
+			{
+				return this.Data.default_value;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.default_value = value;
+			}
+		}
+
+		/*
+		 * Argument Name: value
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string value
+		{
+			get
+			{
+				return this.Data.value;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.value = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRequestField
+	{
+		/*
+		 * PurpleRequestFieldType type
+		 */
+		public Request.PurpleRequestFieldType type;
+
+		/*
+		 * PurpleRequestFieldGroup * group
+		 */
+		public IntPtr group;
+
+		/*
+		 * char * id
+		 */
+		public string id;
+
+		/*
+		 * char * label
+		 */
+		public string label;
+
+		/*
+		 * char * type_hint
+		 */
+		public string type_hint;
+
+		/*
+		 * gboolean visible
+		 */
+		public bool visible;
+
+		/*
+		 * gboolean required
+		 */
+		public bool required;
+
+		/*
+		 * union {
+		struct
+		{
+			gboolean multiline
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRequestField.{
+		struct
+		{
+			gboolean multiline in file "request.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * gboolean masked
+		 */
+		public bool masked;
+
+		/*
+		 * gboolean editable
+		 */
+		public bool editable;
+
+		/*
+		 * char * default_value
+		 */
+		public string default_value;
+
+		/*
+		 * char * value
+		 */
+		public string value;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlist.cs	6bcfe00c95851429e05273eda22ad6a667192309
+++ libpurple/wrapper/PurpleRoomlist.cs	6bcfe00c95851429e05273eda22ad6a667192309
@@ -0,0 +1,222 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlist
+	 */
+	public class PurpleRoomlist : UnmanagedWrapper<_PurpleRoomlist>
+	{
+		public PurpleRoomlist()
+		{
+		}
+
+		public PurpleRoomlist(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlist)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlist));
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: fields
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRoomlist.fields in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: rooms
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRoomlist.rooms in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: in_progress
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool in_progress
+		{
+			get
+			{
+				return this.Data.in_progress;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.in_progress = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ref
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint ref_
+		{
+			get
+			{
+				return this.Data.ref_;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ref_ = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlist
+	{
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * GList * fields
+		 */
+		public IntPtr fields;
+
+		/*
+		 * GList * rooms
+		 */
+		public IntPtr rooms;
+
+		/*
+		 * gboolean in_progress
+		 */
+		public bool in_progress;
+
+		/*
+		 * gpointer ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * gpointer proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * guint ref
+		 */
+		public uint ref_;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlistField.cs	795b68f0be72d5e5978616bfe37c4ec690a0b596
+++ libpurple/wrapper/PurpleRoomlistField.cs	795b68f0be72d5e5978616bfe37c4ec690a0b596
@@ -0,0 +1,167 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlistField
+	 */
+	public class PurpleRoomlistField : UnmanagedWrapper<_PurpleRoomlistField>
+	{
+		public PurpleRoomlistField()
+		{
+		}
+
+		public PurpleRoomlistField(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlistField)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlistField));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleRoomlistFieldType
+		 * Argument Category: KnownEnum
+		 */
+		public Roomlist.PurpleRoomlistFieldType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: hidden
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool hidden
+		{
+			get
+			{
+				return this.Data.hidden;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.hidden = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlistField
+	{
+		/*
+		 * PurpleRoomlistFieldType type
+		 */
+		public Roomlist.PurpleRoomlistFieldType type;
+
+		/*
+		 * gchar * label
+		 */
+		public string label;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * gboolean hidden
+		 */
+		public bool hidden;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlistRoom.cs	b7ebb018fd32b6757e105fff83e538f5ae1cb64a
+++ libpurple/wrapper/PurpleRoomlistRoom.cs	b7ebb018fd32b6757e105fff83e538f5ae1cb64a
@@ -0,0 +1,182 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlistRoom
+	 */
+	public class PurpleRoomlistRoom : UnmanagedWrapper<_PurpleRoomlistRoom>
+	{
+		public PurpleRoomlistRoom()
+		{
+		}
+
+		public PurpleRoomlistRoom(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlistRoom)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlistRoom));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleRoomlistRoomType
+		 * Argument Category: KnownEnum
+		 */
+		public Roomlist.PurpleRoomlistRoomType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fields
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRoomlistRoom.fields in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleRoomlistRoom *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleRoomlistRoom parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: expanded_once
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool expanded_once
+		{
+			get
+			{
+				return this.Data.expanded_once;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.expanded_once = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlistRoom
+	{
+		/*
+		 * PurpleRoomlistRoomType type
+		 */
+		public Roomlist.PurpleRoomlistRoomType type;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * GList * fields
+		 */
+		public IntPtr fields;
+
+		/*
+		 * PurpleRoomlistRoom * parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * gboolean expanded_once
+		 */
+		public bool expanded_once;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlistUiOps.cs	578ece8bee91e00abbf778d7fdf3fa8756d6e4c7
+++ libpurple/wrapper/PurpleRoomlistUiOps.cs	578ece8bee91e00abbf778d7fdf3fa8756d6e4c7
@@ -0,0 +1,317 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlistUiOps
+	 */
+	public class PurpleRoomlistUiOps : UnmanagedWrapper<_PurpleRoomlistUiOps>
+	{
+		public PurpleRoomlistUiOps()
+		{
+		}
+
+		public PurpleRoomlistUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlistUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlistUiOps));
+		}
+
+		/*
+		 * Argument Name: show_with_account
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr show_with_account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: create
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_fields
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_fields
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_room
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_room
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: in_progress
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr in_progress
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlistUiOps
+	{
+		/*
+		 * void (*show_with_account)(PurpleAccount * account)
+		 */
+		public IntPtr show_with_account;
+
+		/*
+		 * void (*create)(PurpleRoomlist * list)
+		 */
+		public IntPtr create;
+
+		/*
+		 * void (*set_fields)(PurpleRoomlist * list, GList * fields)
+		 */
+		public IntPtr set_fields;
+
+		/*
+		 * void (*add_room)(PurpleRoomlist * list, PurpleRoomlistRoom * room)
+		 */
+		public IntPtr add_room;
+
+		/*
+		 * void (*in_progress)(PurpleRoomlist * list, gboolean flag)
+		 */
+		public IntPtr in_progress;
+
+		/*
+		 * void (*destroy)(PurpleRoomlist * list)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundTheme.cs	21ca3d1964ba1531cf42de7a9ff5c32b9e604219
+++ libpurple/wrapper/PurpleSoundTheme.cs	21ca3d1964ba1531cf42de7a9ff5c32b9e604219
@@ -0,0 +1,110 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme.h
+	 * Structure: PurpleSoundTheme
+	 */
+	public class PurpleSoundTheme : UnmanagedWrapper<_PurpleSoundTheme>
+	{
+		public PurpleSoundTheme()
+		{
+		}
+
+		public PurpleSoundTheme(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundTheme)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundTheme));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleTheme
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundTheme.parent in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleTheme parent).
+		 */
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundTheme
+	{
+		/*
+		 * PurpleTheme parent
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundTheme.parent in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleTheme parent).
+		 */
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundThemeClass.cs	e3962db64b0b34c585e21c5b2d1c8068755c86cf
+++ libpurple/wrapper/PurpleSoundThemeClass.cs	e3962db64b0b34c585e21c5b2d1c8068755c86cf
@@ -0,0 +1,85 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme.h
+	 * Structure: PurpleSoundThemeClass
+	 */
+	public class PurpleSoundThemeClass : UnmanagedWrapper<_PurpleSoundThemeClass>
+	{
+		public PurpleSoundThemeClass()
+		{
+		}
+
+		public PurpleSoundThemeClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundThemeClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundThemeClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: PurpleThemeClass
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeClass.parent_class in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeClass parent_class).
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundThemeClass
+	{
+		/*
+		 * PurpleThemeClass parent_class
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeClass.parent_class in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeClass parent_class).
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundThemeLoader.cs	726aff5b8de792a69696991d9980114f98173209
+++ libpurple/wrapper/PurpleSoundThemeLoader.cs	726aff5b8de792a69696991d9980114f98173209
@@ -0,0 +1,85 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme-loader.h
+	 * Structure: PurpleSoundThemeLoader
+	 */
+	public class PurpleSoundThemeLoader : UnmanagedWrapper<_PurpleSoundThemeLoader>
+	{
+		public PurpleSoundThemeLoader()
+		{
+		}
+
+		public PurpleSoundThemeLoader(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundThemeLoader)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundThemeLoader));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleThemeLoader
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoader.parent in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoader parent).
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundThemeLoader
+	{
+		/*
+		 * PurpleThemeLoader parent
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoader.parent in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoader parent).
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundThemeLoaderClass.cs	d676c05dec03d2e06dd9738566314034b3f9b173
+++ libpurple/wrapper/PurpleSoundThemeLoaderClass.cs	d676c05dec03d2e06dd9738566314034b3f9b173
@@ -0,0 +1,85 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme-loader.h
+	 * Structure: PurpleSoundThemeLoaderClass
+	 */
+	public class PurpleSoundThemeLoaderClass : UnmanagedWrapper<_PurpleSoundThemeLoaderClass>
+	{
+		public PurpleSoundThemeLoaderClass()
+		{
+		}
+
+		public PurpleSoundThemeLoaderClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundThemeLoaderClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundThemeLoaderClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: PurpleThemeLoaderClass
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoaderClass.parent_class in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoaderClass parent_class).
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundThemeLoaderClass
+	{
+		/*
+		 * PurpleThemeLoaderClass parent_class
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoaderClass.parent_class in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoaderClass parent_class).
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundUiOps.cs	72dd29d87d4e7f9e0bb9493f03b2e7c7231b5c91
+++ libpurple/wrapper/PurpleSoundUiOps.cs	72dd29d87d4e7f9e0bb9493f03b2e7c7231b5c91
@@ -0,0 +1,267 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound.h
+	 * Structure: PurpleSoundUiOps
+	 */
+	public class PurpleSoundUiOps : UnmanagedWrapper<_PurpleSoundUiOps>
+	{
+		public PurpleSoundUiOps()
+		{
+		}
+
+		public PurpleSoundUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundUiOps));
+		}
+
+		/*
+		 * Argument Name: init
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr init
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: uninit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr uninit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: play_file
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr play_file
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: play_event
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr play_event
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundUiOps
+	{
+		/*
+		 * void (*init)()
+		 */
+		public IntPtr init;
+
+		/*
+		 * void (*uninit)()
+		 */
+		public IntPtr uninit;
+
+		/*
+		 * void (*play_file)(char * filename)
+		 */
+		public IntPtr play_file;
+
+		/*
+		 * void (*play_event)(PurpleSoundEventID event)
+		 */
+		public IntPtr play_event;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSrvResponse.cs	658039f6e90e26a6084eb2f5617b65f72b219941
+++ libpurple/wrapper/PurpleSrvResponse.cs	658039f6e90e26a6084eb2f5617b65f72b219941
@@ -0,0 +1,167 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: dnssrv.h
+	 * Structure: PurpleSrvResponse
+	 */
+	public class PurpleSrvResponse : UnmanagedWrapper<_PurpleSrvResponse>
+	{
+		public PurpleSrvResponse()
+		{
+		}
+
+		public PurpleSrvResponse(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSrvResponse)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSrvResponse));
+		}
+
+		/*
+		 * Argument Name: hostname
+		 * Argument Type: char
+		 * Argument Category: Native
+		 */
+		public string[] hostname
+		{
+			get
+			{
+				return this.Data.hostname;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.hostname = value;
+			}
+		}
+
+		/*
+		 * Argument Name: port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int port
+		{
+			get
+			{
+				return this.Data.port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: weight
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int weight
+		{
+			get
+			{
+				return this.Data.weight;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.weight = value;
+			}
+		}
+
+		/*
+		 * Argument Name: pref
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int pref
+		{
+			get
+			{
+				return this.Data.pref;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.pref = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSrvResponse
+	{
+		/*
+		 * char hostname
+		 */
+		public string[] hostname;
+
+		/*
+		 * int port
+		 */
+		public int port;
+
+		/*
+		 * int weight
+		 */
+		public int weight;
+
+		/*
+		 * int pref
+		 */
+		public int pref;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSslConnection.cs	ffba038f7b7a36cc7ca101f59dbec509c131ecbf
+++ libpurple/wrapper/PurpleSslConnection.cs	ffba038f7b7a36cc7ca101f59dbec509c131ecbf
@@ -0,0 +1,367 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sslconn.h
+	 * Structure: PurpleSslConnection
+	 */
+	public class PurpleSslConnection : UnmanagedWrapper<_PurpleSslConnection>
+	{
+		public PurpleSslConnection()
+		{
+		}
+
+		public PurpleSslConnection(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSslConnection)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSslConnection));
+		}
+
+		/*
+		 * Argument Name: host
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string host
+		{
+			get
+			{
+				return this.Data.host;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.host = value;
+			}
+		}
+
+		/*
+		 * Argument Name: port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int port
+		{
+			get
+			{
+				return this.Data.port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: connect_cb_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr connect_cb_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: connect_cb
+		 * Argument Type: PurpleSslInputFunction
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Sslconn.PurpleSslInputFunction connect_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: error_cb
+		 * Argument Type: PurpleSslErrorFunction
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Sslconn.PurpleSslErrorFunction error_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: recv_cb_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr recv_cb_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: recv_cb
+		 * Argument Type: PurpleSslInputFunction
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Sslconn.PurpleSslInputFunction recv_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: fd
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int fd
+		{
+			get
+			{
+				return this.Data.fd;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fd = value;
+			}
+		}
+
+		/*
+		 * Argument Name: inpa
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint inpa
+		{
+			get
+			{
+				return this.Data.inpa;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.inpa = value;
+			}
+		}
+
+		/*
+		 * Argument Name: connect_data
+		 * Argument Type: PurpleProxyConnectData *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleProxyConnectData */ IntPtr connect_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: private_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr private_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: verifier
+		 * Argument Type: PurpleCertificateVerifier *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateVerifier verifier
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSslConnection
+	{
+		/*
+		 * char * host
+		 */
+		public string host;
+
+		/*
+		 * int port
+		 */
+		public int port;
+
+		/*
+		 * void * connect_cb_data
+		 */
+		public IntPtr connect_cb_data;
+
+		/*
+		 * PurpleSslInputFunction connect_cb
+		 */
+		public IntPtr connect_cb;
+
+		/*
+		 * PurpleSslErrorFunction error_cb
+		 */
+		public IntPtr error_cb;
+
+		/*
+		 * void * recv_cb_data
+		 */
+		public IntPtr recv_cb_data;
+
+		/*
+		 * PurpleSslInputFunction recv_cb
+		 */
+		public IntPtr recv_cb;
+
+		/*
+		 * int fd
+		 */
+		public int fd;
+
+		/*
+		 * guint inpa
+		 */
+		public uint inpa;
+
+		/*
+		 * PurpleProxyConnectData * connect_data
+		 */
+		public IntPtr connect_data;
+
+		/*
+		 * void * private_data
+		 */
+		public IntPtr private_data;
+
+		/*
+		 * PurpleCertificateVerifier * verifier
+		 */
+		public IntPtr verifier;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleStunNatDiscovery.cs	bc6e27b23130fb3873d0b105e8abae998e0c11b9
+++ libpurple/wrapper/PurpleStunNatDiscovery.cs	bc6e27b23130fb3873d0b105e8abae998e0c11b9
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: stun.h
+	 * Structure: PurpleStunNatDiscovery
+	 */
+	public class PurpleStunNatDiscovery : UnmanagedWrapper<_PurpleStunNatDiscovery>
+	{
+		public PurpleStunNatDiscovery()
+		{
+		}
+
+		public PurpleStunNatDiscovery(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleStunNatDiscovery)Marshal.PtrToStructure(this.Reference, typeof(_PurpleStunNatDiscovery));
+		}
+
+		/*
+		 * Argument Name: status
+		 * Argument Type: PurpleStunStatus
+		 * Argument Category: KnownEnum
+		 */
+		public Stun.PurpleStunStatus status
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleStunNatType
+		 * Argument Category: KnownEnum
+		 */
+		public Stun.PurpleStunNatType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: publicip
+		 * Argument Type: char
+		 * Argument Category: Native
+		 */
+		public string[] publicip
+		{
+			get
+			{
+				return this.Data.publicip;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.publicip = value;
+			}
+		}
+
+		/*
+		 * Argument Name: servername
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string servername
+		{
+			get
+			{
+				return this.Data.servername;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.servername = value;
+			}
+		}
+
+		/*
+		 * Argument Name: lookup_time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime lookup_time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleStunNatDiscovery
+	{
+		/*
+		 * PurpleStunStatus status
+		 */
+		public Stun.PurpleStunStatus status;
+
+		/*
+		 * PurpleStunNatType type
+		 */
+		public Stun.PurpleStunNatType type;
+
+		/*
+		 * char publicip
+		 */
+		public string[] publicip;
+
+		/*
+		 * char * servername
+		 */
+		public string servername;
+
+		/*
+		 * time_t lookup_time
+		 */
+		public ulong lookup_time;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleTheme.cs	5b7fe0d509e5bd80194694d5d2ea1769e2e9f998
+++ libpurple/wrapper/PurpleTheme.cs	5b7fe0d509e5bd80194694d5d2ea1769e2e9f998
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme.h
+	 * Structure: PurpleTheme
+	 */
+	public class PurpleTheme : UnmanagedWrapper<_PurpleTheme>
+	{
+		public PurpleTheme()
+		{
+		}
+
+		public PurpleTheme(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleTheme)Marshal.PtrToStructure(this.Reference, typeof(_PurpleTheme));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: GObject
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleTheme
+	{
+		/*
+		 * GObject parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeClass.cs	63ce3584583cb8a1aaf7aae02da6a332431e10d3
+++ libpurple/wrapper/PurpleThemeClass.cs	63ce3584583cb8a1aaf7aae02da6a332431e10d3
@@ -0,0 +1,92 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme.h
+	 * Structure: PurpleThemeClass
+	 */
+	public class PurpleThemeClass : UnmanagedWrapper<_PurpleThemeClass>
+	{
+		public PurpleThemeClass()
+		{
+		}
+
+		public PurpleThemeClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: GObjectClass
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent_class
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeClass
+	{
+		/*
+		 * GObjectClass parent_class
+		 */
+		public IntPtr parent_class;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeLoader.cs	f28c6a32549e3d5b4a42af21c34303c815efe32c
+++ libpurple/wrapper/PurpleThemeLoader.cs	f28c6a32549e3d5b4a42af21c34303c815efe32c
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-loader.h
+	 * Structure: PurpleThemeLoader
+	 */
+	public class PurpleThemeLoader : UnmanagedWrapper<_PurpleThemeLoader>
+	{
+		public PurpleThemeLoader()
+		{
+		}
+
+		public PurpleThemeLoader(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeLoader)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeLoader));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: GObject
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeLoader
+	{
+		/*
+		 * GObject parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeLoaderClass.cs	c5255410d6261737391b5d8ec75d1afdc118cc7a
+++ libpurple/wrapper/PurpleThemeLoaderClass.cs	c5255410d6261737391b5d8ec75d1afdc118cc7a
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-loader.h
+	 * Structure: PurpleThemeLoaderClass
+	 */
+	public class PurpleThemeLoaderClass : UnmanagedWrapper<_PurpleThemeLoaderClass>
+	{
+		public PurpleThemeLoaderClass()
+		{
+		}
+
+		public PurpleThemeLoaderClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeLoaderClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeLoaderClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: GObjectClass
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent_class
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: purple_theme_loader_build
+		 * Argument Type: PurpleTheme *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr purple_theme_loader_build
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeLoaderClass
+	{
+		/*
+		 * GObjectClass parent_class
+		 */
+		public IntPtr parent_class;
+
+		/*
+		 * PurpleTheme * (*purple_theme_loader_build)(gchar* )
+		 */
+		public IntPtr purple_theme_loader_build;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeManager.cs	05720e6991f402dfd385edc3fe460eb18509a58e
+++ libpurple/wrapper/PurpleThemeManager.cs	05720e6991f402dfd385edc3fe460eb18509a58e
@@ -0,0 +1,92 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-manager.h
+	 * Structure: PurpleThemeManager
+	 */
+	public class PurpleThemeManager : UnmanagedWrapper<_PurpleThemeManager>
+	{
+		public PurpleThemeManager()
+		{
+		}
+
+		public PurpleThemeManager(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeManager)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeManager));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: GObject
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeManager
+	{
+		/*
+		 * GObject parent
+		 */
+		public IntPtr parent;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeManagerClass.cs	b8c0a7354ea6e889fc25977b0172236a611a3afe
+++ libpurple/wrapper/PurpleThemeManagerClass.cs	b8c0a7354ea6e889fc25977b0172236a611a3afe
@@ -0,0 +1,92 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-manager.h
+	 * Structure: PurpleThemeManagerClass
+	 */
+	public class PurpleThemeManagerClass : UnmanagedWrapper<_PurpleThemeManagerClass>
+	{
+		public PurpleThemeManagerClass()
+		{
+		}
+
+		public PurpleThemeManagerClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeManagerClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeManagerClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: GObjectClass
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent_class
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeManagerClass
+	{
+		/*
+		 * GObjectClass parent_class
+		 */
+		public IntPtr parent_class;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWhiteboard.cs	dfee8b7418759c6113019d70a6069d0993a2eef5
+++ libpurple/wrapper/PurpleWhiteboard.cs	dfee8b7418759c6113019d70a6069d0993a2eef5
@@ -0,0 +1,232 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: whiteboard.h
+	 * Structure: PurpleWhiteboard
+	 */
+	public class PurpleWhiteboard : UnmanagedWrapper<_PurpleWhiteboard>
+	{
+		public PurpleWhiteboard()
+		{
+		}
+
+		public PurpleWhiteboard(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleWhiteboard)Marshal.PtrToStructure(this.Reference, typeof(_PurpleWhiteboard));
+		}
+
+		/*
+		 * Argument Name: state
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int state
+		{
+			get
+			{
+				return this.Data.state;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.state = value;
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string who
+		{
+			get
+			{
+				return this.Data.who;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.who = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: prpl_ops
+		 * Argument Type: PurpleWhiteboardPrplOps *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleWhiteboardPrplOps prpl_ops
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: draw_list
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleWhiteboard.draw_list in file "whiteboard.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleWhiteboard
+	{
+		/*
+		 * int state
+		 */
+		public int state;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * who
+		 */
+		public string who;
+
+		/*
+		 * void * ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * void * proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * PurpleWhiteboardPrplOps * prpl_ops
+		 */
+		public IntPtr prpl_ops;
+
+		/*
+		 * GList * draw_list
+		 */
+		public IntPtr draw_list;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWhiteboardPrplOps.cs	945e364643f1d70dbb89b44d3b331a73b6bc96d5
+++ libpurple/wrapper/PurpleWhiteboardPrplOps.cs	945e364643f1d70dbb89b44d3b331a73b6bc96d5
@@ -0,0 +1,367 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: whiteboard.h
+	 * Structure: PurpleWhiteboardPrplOps
+	 */
+	public class PurpleWhiteboardPrplOps : UnmanagedWrapper<_PurpleWhiteboardPrplOps>
+	{
+		public PurpleWhiteboardPrplOps()
+		{
+		}
+
+		public PurpleWhiteboardPrplOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleWhiteboardPrplOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleWhiteboardPrplOps));
+		}
+
+		/*
+		 * Argument Name: start
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr start
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: end
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr end
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_dimensions
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_dimensions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_dimensions
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_dimensions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_brush
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_brush
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_brush
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_brush
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_draw_list
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr send_draw_list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: clear
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr clear
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleWhiteboardPrplOps
+	{
+		/*
+		 * void (*start)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr start;
+
+		/*
+		 * void (*end)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr end;
+
+		/*
+		 * void (*get_dimensions)(PurpleWhiteboard * wb, int * width, int * height)
+		 */
+		public IntPtr get_dimensions;
+
+		/*
+		 * void (*set_dimensions)(PurpleWhiteboard * wb, int width, int height)
+		 */
+		public IntPtr set_dimensions;
+
+		/*
+		 * void (*get_brush)(PurpleWhiteboard * wb, int * size, int * color)
+		 */
+		public IntPtr get_brush;
+
+		/*
+		 * void (*set_brush)(PurpleWhiteboard * wb, int size, int color)
+		 */
+		public IntPtr set_brush;
+
+		/*
+		 * void (*send_draw_list)(PurpleWhiteboard * wb, GList * draw_list)
+		 */
+		public IntPtr send_draw_list;
+
+		/*
+		 * void (*clear)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr clear;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWhiteboardUiOps.cs	ee5ee6544ea1a72b8b3780b5d9a46d9e2485b520
+++ libpurple/wrapper/PurpleWhiteboardUiOps.cs	ee5ee6544ea1a72b8b3780b5d9a46d9e2485b520
@@ -0,0 +1,342 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: whiteboard.h
+	 * Structure: PurpleWhiteboardUiOps
+	 */
+	public class PurpleWhiteboardUiOps : UnmanagedWrapper<_PurpleWhiteboardUiOps>
+	{
+		public PurpleWhiteboardUiOps()
+		{
+		}
+
+		public PurpleWhiteboardUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleWhiteboardUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleWhiteboardUiOps));
+		}
+
+		/*
+		 * Argument Name: create
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_dimensions
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_dimensions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_brush
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_brush
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: draw_point
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr draw_point
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: draw_line
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr draw_line
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: clear
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr clear
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleWhiteboardUiOps
+	{
+		/*
+		 * void (*create)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr create;
+
+		/*
+		 * void (*destroy)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*set_dimensions)(PurpleWhiteboard * wb, int width, int height)
+		 */
+		public IntPtr set_dimensions;
+
+		/*
+		 * void (*set_brush)(PurpleWhiteboard * wb, int size, int color)
+		 */
+		public IntPtr set_brush;
+
+		/*
+		 * void (*draw_point)(PurpleWhiteboard * wb, int x, int y, int color, int size)
+		 */
+		public IntPtr draw_point;
+
+		/*
+		 * void (*draw_line)(PurpleWhiteboard * wb, int x1, int y1, int x2, int y2, int color, int size)
+		 */
+		public IntPtr draw_line;
+
+		/*
+		 * void (*clear)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr clear;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWrapper.csproj	cda9988892e23cf62f44eefee6f20ef427533252
+++ libpurple/wrapper/PurpleWrapper.csproj	cda9988892e23cf62f44eefee6f20ef427533252
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{8034DEA9-30CC-DEA0-3903-80210CE809FA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Scripts</RootNamespace>
+    <AssemblyName>Scripts</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug %28Win32%29|AnyCPU' ">
+    <OutputPath>bin\Debug %28Win32%29\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug %28Win32%29|x86' ">
+    <OutputPath>bin\x86\Debug %28Win32%29\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="UnmanagedWrapper.cs" />
+    <Compile Include="Account.cs" />
+    <Compile Include="PurpleAccountUiOps.cs" />
+    <Compile Include="PurpleAccount.cs" />
+    <Compile Include="Accountopt.cs" />
+    <Compile Include="Blist.cs" />
+    <Compile Include="PurpleBlistNode.cs" />
+    <Compile Include="PurpleBuddy.cs" />
+    <Compile Include="PurpleContact.cs" />
+    <Compile Include="PurpleGroup.cs" />
+    <Compile Include="PurpleChat.cs" />
+    <Compile Include="PurpleBuddyList.cs" />
+    <Compile Include="PurpleBlistUiOps.cs" />
+    <Compile Include="Buddyicon.cs" />
+    <Compile Include="Certificate.cs" />
+    <Compile Include="PurpleCertificate.cs" />
+    <Compile Include="PurpleCertificatePool.cs" />
+    <Compile Include="PurpleCertificateScheme.cs" />
+    <Compile Include="PurpleCertificateVerifier.cs" />
+    <Compile Include="PurpleCertificateVerificationRequest.cs" />
+    <Compile Include="Cipher.cs" />
+    <Compile Include="PurpleCipherOps.cs" />
+    <Compile Include="Circbuffer.cs" />
+    <Compile Include="PurpleCircBuffer.cs" />
+    <Compile Include="Cmds.cs" />
+    <Compile Include="Config.cs" />
+    <Compile Include="Connection.cs" />
+    <Compile Include="PurpleConnection.cs" />
+    <Compile Include="Conversation.cs" />
+    <Compile Include="PurpleConversationUiOps.cs" />
+    <Compile Include="PurpleConvIm.cs" />
+    <Compile Include="PurpleConvChat.cs" />
+    <Compile Include="PurpleConvChatBuddy.cs" />
+    <Compile Include="PurpleConvMessage.cs" />
+    <Compile Include="PurpleConversation.cs" />
+    <Compile Include="Core.cs" />
+    <Compile Include="Debug.cs" />
+    <Compile Include="Desktopitem.cs" />
+    <Compile Include="Dnsquery.cs" />
+    <Compile Include="Dnssrv.cs" />
+    <Compile Include="PurpleSrvResponse.cs" />
+    <Compile Include="Eventloop.cs" />
+    <Compile Include="PurpleEventLoopUiOps.cs" />
+    <Compile Include="Ft.cs" />
+    <Compile Include="PurpleXfer.cs" />
+    <Compile Include="Idle.cs" />
+    <Compile Include="Imgstore.cs" />
+    <Compile Include="Log.cs" />
+    <Compile Include="PurpleLogLogger.cs" />
+    <Compile Include="PurpleLog.cs" />
+    <Compile Include="PurpleLogCommonLoggerData.cs" />
+    <Compile Include="PurpleLogSet.cs" />
+    <Compile Include="Media.cs" />
+    <Compile Include="Mediamanager.cs" />
+    <Compile Include="Mime.cs" />
+    <Compile Include="NatPmp.cs" />
+    <Compile Include="Network.cs" />
+    <Compile Include="Notify.cs" />
+    <Compile Include="Ntlm.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="PurplePluginInfo.cs" />
+    <Compile Include="PurplePluginLoaderInfo.cs" />
+    <Compile Include="PurplePlugin.cs" />
+    <Compile Include="PurplePluginUiInfo.cs" />
+    <Compile Include="PurplePluginAction.cs" />
+    <Compile Include="Pluginpref.cs" />
+    <Compile Include="Pounce.cs" />
+    <Compile Include="PurplePounce.cs" />
+    <Compile Include="Prefs.cs" />
+    <Compile Include="Privacy.cs" />
+    <Compile Include="Proxy.cs" />
+    <Compile Include="Prpl.cs" />
+    <Compile Include="PurpleBuddyIconSpec.cs" />
+    <Compile Include="proto_chat_entry.cs" />
+    <Compile Include="PurpleAttentionType.cs" />
+    <Compile Include="PurplePluginProtocolInfo.cs" />
+    <Compile Include="PurpleClient.cs" />
+    <Compile Include="Request.cs" />
+    <Compile Include="PurpleRequestField.cs" />
+    <Compile Include="Roomlist.cs" />
+    <Compile Include="PurpleRoomlist.cs" />
+    <Compile Include="PurpleRoomlistRoom.cs" />
+    <Compile Include="PurpleRoomlistField.cs" />
+    <Compile Include="PurpleRoomlistUiOps.cs" />
+    <Compile Include="Savedstatuses.cs" />
+    <Compile Include="Server.cs" />
+    <Compile Include="Signals.cs" />
+    <Compile Include="Smiley.cs" />
+    <Compile Include="SoundThemeLoader.cs" />
+    <Compile Include="PurpleSoundThemeLoader.cs" />
+    <Compile Include="PurpleSoundThemeLoaderClass.cs" />
+    <Compile Include="SoundTheme.cs" />
+    <Compile Include="PurpleSoundTheme.cs" />
+    <Compile Include="PurpleSoundThemeClass.cs" />
+    <Compile Include="Sound.cs" />
+    <Compile Include="PurpleSoundUiOps.cs" />
+    <Compile Include="Sslconn.cs" />
+    <Compile Include="PurpleSslConnection.cs" />
+    <Compile Include="Status.cs" />
+    <Compile Include="Stringref.cs" />
+    <Compile Include="Stun.cs" />
+    <Compile Include="PurpleStunNatDiscovery.cs" />
+    <Compile Include="ThemeLoader.cs" />
+    <Compile Include="PurpleThemeLoader.cs" />
+    <Compile Include="PurpleThemeLoaderClass.cs" />
+    <Compile Include="ThemeManager.cs" />
+    <Compile Include="PurpleThemeManager.cs" />
+    <Compile Include="PurpleThemeManagerClass.cs" />
+    <Compile Include="Theme.cs" />
+    <Compile Include="PurpleTheme.cs" />
+    <Compile Include="PurpleThemeClass.cs" />
+    <Compile Include="Upnp.cs" />
+    <Compile Include="Util.cs" />
+    <Compile Include="PurpleMenuAction.cs" />
+    <Compile Include="PurpleKeyValuePair.cs" />
+    <Compile Include="Value.cs" />
+    <Compile Include="Version.cs" />
+    <Compile Include="Whiteboard.cs" />
+    <Compile Include="PurpleWhiteboard.cs" />
+    <Compile Include="PurpleWhiteboardUiOps.cs" />
+    <Compile Include="PurpleWhiteboardPrplOps.cs" />
+    <Compile Include="XMLNodeClass.cs" />
+    <Compile Include="xmlnode.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
============================================================
--- libpurple/wrapper/PurpleXfer.cs	d7dfed200d807464cd60a43a82b2817a978f9ed3
+++ libpurple/wrapper/PurpleXfer.cs	d7dfed200d807464cd60a43a82b2817a978f9ed3
@@ -0,0 +1,789 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: ft.h
+	 * Structure: PurpleXfer
+	 */
+	public class PurpleXfer : UnmanagedWrapper<_PurpleXfer>
+	{
+		public PurpleXfer()
+		{
+		}
+
+		public PurpleXfer(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleXfer)Marshal.PtrToStructure(this.Reference, typeof(_PurpleXfer));
+		}
+
+		/*
+		 * Argument Name: ref
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint ref_
+		{
+			get
+			{
+				return this.Data.ref_;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ref_ = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleXferType
+		 * Argument Category: KnownEnum
+		 */
+		public Ft.PurpleXferType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string who
+		{
+			get
+			{
+				return this.Data.who;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.who = value;
+			}
+		}
+
+		/*
+		 * Argument Name: message
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string message
+		{
+			get
+			{
+				return this.Data.message;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.message = value;
+			}
+		}
+
+		/*
+		 * Argument Name: filename
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string filename
+		{
+			get
+			{
+				return this.Data.filename;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.filename = value;
+			}
+		}
+
+		/*
+		 * Argument Name: local_filename
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string local_filename
+		{
+			get
+			{
+				return this.Data.local_filename;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.local_filename = value;
+			}
+		}
+
+		/*
+		 * Argument Name: size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong size
+		{
+			get
+			{
+				return this.Data.size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: dest_fp
+		 * Argument Type: FILE *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to FILE */ IntPtr dest_fp
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remote_ip
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string remote_ip
+		{
+			get
+			{
+				return this.Data.remote_ip;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remote_ip = value;
+			}
+		}
+
+		/*
+		 * Argument Name: local_port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int local_port
+		{
+			get
+			{
+				return this.Data.local_port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.local_port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: remote_port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int remote_port
+		{
+			get
+			{
+				return this.Data.remote_port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remote_port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fd
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int fd
+		{
+			get
+			{
+				return this.Data.fd;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fd = value;
+			}
+		}
+
+		/*
+		 * Argument Name: watcher
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int watcher
+		{
+			get
+			{
+				return this.Data.watcher;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.watcher = value;
+			}
+		}
+
+		/*
+		 * Argument Name: bytes_sent
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong bytes_sent
+		{
+			get
+			{
+				return this.Data.bytes_sent;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.bytes_sent = value;
+			}
+		}
+
+		/*
+		 * Argument Name: bytes_remaining
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong bytes_remaining
+		{
+			get
+			{
+				return this.Data.bytes_remaining;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.bytes_remaining = value;
+			}
+		}
+
+		/*
+		 * Argument Name: start_time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime start_time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: end_time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime end_time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: current_buffer_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong current_buffer_size
+		{
+			get
+			{
+				return this.Data.current_buffer_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.current_buffer_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: status
+		 * Argument Type: PurpleXferStatusType
+		 * Argument Category: KnownEnum
+		 */
+		public Ft.PurpleXferStatusType status
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: {
+		void (*init)(PurpleXfer *xfer)
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleXfer.{
+		void (*init)(PurpleXfer *xfer) in file "ft.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: request_denied
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_denied
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: start
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr start
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: end
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr end
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cancel_send
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr cancel_send
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cancel_recv
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr cancel_recv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: read
+		 * Argument Type: gssize
+		 * Argument Category: Native
+		 */
+		public IntPtr read
+		{
+			get
+			{
+				return this.Data.read;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.read = value;
+			}
+		}
+
+		/*
+		 * Argument Name: write
+		 * Argument Type: gssize
+		 * Argument Category: Native
+		 */
+		public IntPtr write
+		{
+			get
+			{
+				return this.Data.write;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.write = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ack
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr ack
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleXfer
+	{
+		/*
+		 * guint ref
+		 */
+		public uint ref_;
+
+		/*
+		 * PurpleXferType type
+		 */
+		public Ft.PurpleXferType type;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * who
+		 */
+		public string who;
+
+		/*
+		 * char * message
+		 */
+		public string message;
+
+		/*
+		 * char * filename
+		 */
+		public string filename;
+
+		/*
+		 * char * local_filename
+		 */
+		public string local_filename;
+
+		/*
+		 * size_t size
+		 */
+		public ulong size;
+
+		/*
+		 * FILE * dest_fp
+		 */
+		public IntPtr dest_fp;
+
+		/*
+		 * char * remote_ip
+		 */
+		public string remote_ip;
+
+		/*
+		 * int local_port
+		 */
+		public int local_port;
+
+		/*
+		 * int remote_port
+		 */
+		public int remote_port;
+
+		/*
+		 * int fd
+		 */
+		public int fd;
+
+		/*
+		 * int watcher
+		 */
+		public int watcher;
+
+		/*
+		 * size_t bytes_sent
+		 */
+		public ulong bytes_sent;
+
+		/*
+		 * size_t bytes_remaining
+		 */
+		public ulong bytes_remaining;
+
+		/*
+		 * time_t start_time
+		 */
+		public ulong start_time;
+
+		/*
+		 * time_t end_time
+		 */
+		public ulong end_time;
+
+		/*
+		 * size_t current_buffer_size
+		 */
+		public ulong current_buffer_size;
+
+		/*
+		 * PurpleXferStatusType status
+		 */
+		public Ft.PurpleXferStatusType status;
+
+		/*
+		 * struct {
+		void (*init)(PurpleXfer *xfer)
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleXfer.{
+		void (*init)(PurpleXfer *xfer) in file "ft.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * void (*request_denied)(PurpleXfer * xfer)
+		 */
+		public IntPtr request_denied;
+
+		/*
+		 * void (*start)(PurpleXfer * xfer)
+		 */
+		public IntPtr start;
+
+		/*
+		 * void (*end)(PurpleXfer * xfer)
+		 */
+		public IntPtr end;
+
+		/*
+		 * void (*cancel_send)(PurpleXfer * xfer)
+		 */
+		public IntPtr cancel_send;
+
+		/*
+		 * void (*cancel_recv)(PurpleXfer * xfer)
+		 */
+		public IntPtr cancel_recv;
+
+		/*
+		 * gssize (*read)(guchar ** buffer, PurpleXfer * xfer)
+		 */
+		public IntPtr read;
+
+		/*
+		 * gssize (*write)(guchar * buffer, size_t size, PurpleXfer * xfer)
+		 */
+		public IntPtr write;
+
+		/*
+		 * void (*ack)(PurpleXfer * xfer, guchar * buffer, size_t size)
+		 */
+		public IntPtr ack;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/Request.cs	7c608be59c50f1daf9009e475aea50bdfe0e2a6d
+++ libpurple/wrapper/Request.cs	7c608be59c50f1daf9009e475aea50bdfe0e2a6d
@@ -0,0 +1,768 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: request.h
+	 */
+	public class Request
+	{
+		public enum PurpleRequestType
+		{
+			PURPLE_REQUEST_INPUT = 0,
+			PURPLE_REQUEST_CHOICE,
+			PURPLE_REQUEST_ACTION,
+			PURPLE_REQUEST_FIELDS,
+			PURPLE_REQUEST_FILE,
+			PURPLE_REQUEST_FOLDER
+		};
+
+		public enum PurpleRequestFieldType
+		{
+			PURPLE_REQUEST_FIELD_NONE,
+			PURPLE_REQUEST_FIELD_STRING,
+			PURPLE_REQUEST_FIELD_INTEGER,
+			PURPLE_REQUEST_FIELD_BOOLEAN,
+			PURPLE_REQUEST_FIELD_CHOICE,
+			PURPLE_REQUEST_FIELD_LIST,
+			PURPLE_REQUEST_FIELD_LABEL,
+			PURPLE_REQUEST_FIELD_IMAGE,
+			PURPLE_REQUEST_FIELD_ACCOUNT
+		};
+
+		public delegate void PurpleRequestInputCb(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+		public delegate void PurpleRequestActionCb(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1);
+		public delegate void PurpleRequestChoiceCb(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1);
+		public delegate void PurpleRequestFieldsCb(IntPtr _PurpleWrapper_arg0, IntPtr fields);
+		public delegate void PurpleRequestFileCb(IntPtr _PurpleWrapper_arg0, string filename);
+
+		/*
+		 * Function Name: purple_request_fields_new
+		 * Function Type: PurpleRequestFields *
+		 * Function RawType: PurpleRequestFields
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestFields * purple_request_fields_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_fields_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestFields */ IntPtr FieldsNew()
+		{
+			/* Unable to process the return value of purple_request_fields_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_fields_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_fields_destroy(PurpleRequestFields * fields)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_fields_destroy(IntPtr fields);
+
+		public static void FieldsDestroy(/* Resolved as PointerToUnknownStruct to PurpleRequestFields */ IntPtr fields)
+		{
+			/* Unable to process fields, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_fields_get_groups
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_fields_get_groups(PurpleRequestFields * fields)
+		 * 
+		 * Could not generate a wrapper for purple_request_fields_get_groups in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_fields_get_groups
+		 */
+
+		/*
+		 * Function Name: purple_request_fields_get_required
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_fields_get_required(PurpleRequestFields * fields)
+		 * 
+		 * Could not generate a wrapper for purple_request_fields_get_required in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_fields_get_required
+		 */
+
+		/*
+		 * Function Name: purple_request_field_group_new
+		 * Function Type: PurpleRequestFieldGroup *
+		 * Function RawType: PurpleRequestFieldGroup
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestFieldGroup * purple_request_field_group_new(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_group_new(string title);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr FieldGroupNew(string title)
+		{
+			/* Unable to process the return value of purple_request_field_group_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_group_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_group_destroy(PurpleRequestFieldGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_group_destroy(IntPtr group);
+
+		public static void FieldGroupDestroy(/* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr group)
+		{
+			/* Unable to process group, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_destroy(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_destroy(IntPtr field);
+
+		public static void FieldDestroy(PurpleRequestField field)
+		{
+			purple_request_field_destroy(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_set_label
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_set_label(PurpleRequestField * field, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_set_label(IntPtr field, string label);
+
+		public static void FieldSetLabel(PurpleRequestField field, string label)
+		{
+			purple_request_field_set_label(field.Reference, label);
+		}
+
+		/*
+		 * Function Name: purple_request_field_set_visible
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_set_visible(PurpleRequestField * field, gboolean visible)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_set_visible(IntPtr field, bool visible);
+
+		public static void FieldSetVisible(PurpleRequestField field, bool visible)
+		{
+			purple_request_field_set_visible(field.Reference, visible);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_type
+		 * Function Type: PurpleRequestFieldType
+		 * Function RawType: PurpleRequestFieldType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleRequestFieldType purple_request_field_get_type(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Request.PurpleRequestFieldType purple_request_field_get_type(IntPtr field);
+
+		public static Request.PurpleRequestFieldType FieldGetType(PurpleRequestField field)
+		{
+			/* Unable to process the return value of purple_request_field_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_group
+		 * Function Type: PurpleRequestFieldGroup *
+		 * Function RawType: PurpleRequestFieldGroup
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestFieldGroup * purple_request_field_get_group(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_get_group(IntPtr field);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr FieldGetGroup(PurpleRequestField field)
+		{
+			/* Unable to process the return value of purple_request_field_get_group, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_id
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_get_id(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_get_id(IntPtr field);
+
+		public static string FieldGetId(PurpleRequestField field)
+		{
+			return purple_request_field_get_id(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_label
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_get_label(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_get_label(IntPtr field);
+
+		public static string FieldGetLabel(PurpleRequestField field)
+		{
+			return purple_request_field_get_label(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_is_visible
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_is_visible(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_is_visible(IntPtr field);
+
+		public static bool FieldIsVisible(PurpleRequestField field)
+		{
+			return purple_request_field_is_visible(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_type_hint
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_get_type_hint(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_get_type_hint(IntPtr field);
+
+		public static string FieldGetTypeHint(PurpleRequestField field)
+		{
+			return purple_request_field_get_type_hint(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_is_required
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_is_required(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_is_required(IntPtr field);
+
+		public static bool FieldIsRequired(PurpleRequestField field)
+		{
+			return purple_request_field_is_required(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_ui_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_request_field_get_ui_data(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_get_ui_data(IntPtr field);
+
+		public static IntPtr FieldGetUiData(PurpleRequestField field)
+		{
+			return purple_request_field_get_ui_data(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_get_value
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_string_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_string_get_value(IntPtr field);
+
+		public static string FieldStringGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_string_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_is_multiline
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_string_is_multiline(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_string_is_multiline(IntPtr field);
+
+		public static bool FieldStringIsMultiline(PurpleRequestField field)
+		{
+			return purple_request_field_string_is_multiline(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_is_masked
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_string_is_masked(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_string_is_masked(IntPtr field);
+
+		public static bool FieldStringIsMasked(PurpleRequestField field)
+		{
+			return purple_request_field_string_is_masked(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_is_editable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_string_is_editable(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_string_is_editable(IntPtr field);
+
+		public static bool FieldStringIsEditable(PurpleRequestField field)
+		{
+			return purple_request_field_string_is_editable(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_int_set_value
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_int_set_value(PurpleRequestField * field, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_int_set_value(IntPtr field, int value);
+
+		public static void FieldIntSetValue(PurpleRequestField field, int value)
+		{
+			purple_request_field_int_set_value(field.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_request_field_int_get_default_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_int_get_default_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_int_get_default_value(IntPtr field);
+
+		public static int FieldIntGetDefaultValue(PurpleRequestField field)
+		{
+			return purple_request_field_int_get_default_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_int_get_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_int_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_int_get_value(IntPtr field);
+
+		public static int FieldIntGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_int_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_bool_get_value
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_bool_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_bool_get_value(IntPtr field);
+
+		public static bool FieldBoolGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_bool_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_set_value
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_choice_set_value(PurpleRequestField * field, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_choice_set_value(IntPtr field, int value);
+
+		public static void FieldChoiceSetValue(PurpleRequestField field, int value)
+		{
+			purple_request_field_choice_set_value(field.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_get_default_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_choice_get_default_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_choice_get_default_value(IntPtr field);
+
+		public static int FieldChoiceGetDefaultValue(PurpleRequestField field)
+		{
+			return purple_request_field_choice_get_default_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_get_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_choice_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_choice_get_value(IntPtr field);
+
+		public static int FieldChoiceGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_choice_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_get_labels
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_field_choice_get_labels(PurpleRequestField * field)
+		 * 
+		 * Could not generate a wrapper for purple_request_field_choice_get_labels in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_field_choice_get_labels
+		 */
+
+		/*
+		 * Function Name: purple_request_field_list_new
+		 * Function Type: PurpleRequestField *
+		 * Function RawType: PurpleRequestField
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRequestField * purple_request_field_list_new(char * id, char * text)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_list_new(string id, string text);
+
+		public static PurpleRequestField FieldListNew(string id, string text)
+		{
+			return new PurpleRequestField(purple_request_field_list_new(id, text));
+		}
+
+		/*
+		 * Function Name: purple_request_field_list_clear_selected
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_list_clear_selected(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_list_clear_selected(IntPtr field);
+
+		public static void FieldListClearSelected(PurpleRequestField field)
+		{
+			purple_request_field_list_clear_selected(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_list_get_items
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_field_list_get_items(PurpleRequestField * field)
+		 * 
+		 * Could not generate a wrapper for purple_request_field_list_get_items in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_field_list_get_items
+		 */
+
+		/*
+		 * Function Name: purple_request_field_image_set_scale
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_image_set_scale(PurpleRequestField * field, unsigned int x, unsigned int y)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_image_set_scale(IntPtr field, uint x, uint y);
+
+		public static void FieldImageSetScale(PurpleRequestField field, uint x, uint y)
+		{
+			purple_request_field_image_set_scale(field.Reference, x, y);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_buffer
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_image_get_buffer(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_image_get_buffer(IntPtr field);
+
+		public static string FieldImageGetBuffer(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_buffer(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_size
+		 * Function Type: gsize
+		 * Function RawType: gsize
+		 * Function Category: Native
+		 */
+		/*
+		 * gsize purple_request_field_image_get_size(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_request_field_image_get_size(IntPtr field);
+
+		public static ulong FieldImageGetSize(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_size(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_scale_x
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_request_field_image_get_scale_x(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_request_field_image_get_scale_x(IntPtr field);
+
+		public static uint FieldImageGetScaleX(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_scale_x(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_scale_y
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_request_field_image_get_scale_y(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_request_field_image_get_scale_y(IntPtr field);
+
+		public static uint FieldImageGetScaleY(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_scale_y(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_close(PurpleRequestType type, void * uihandle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_close(Request.PurpleRequestType type, IntPtr uihandle);
+
+		public static void Close(Request.PurpleRequestType type, IntPtr uihandle)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_close_with_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_close_with_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_close_with_handle(IntPtr handle);
+
+		public static void CloseWithHandle(IntPtr handle)
+		{
+			purple_request_close_with_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_request_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_set_ui_ops(PurpleRequestUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleRequestUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_get_ui_ops
+		 * Function Type: PurpleRequestUiOps *
+		 * Function RawType: PurpleRequestUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestUiOps * purple_request_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_request_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Roomlist.cs	4b084a19266da03ebd7f11496d0370cd0f3dba54
+++ libpurple/wrapper/Roomlist.cs	4b084a19266da03ebd7f11496d0370cd0f3dba54
@@ -0,0 +1,444 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 */
+	public class Roomlist
+	{
+		public enum PurpleRoomlistRoomType
+		{
+			PURPLE_ROOMLIST_ROOMTYPE_CATEGORY = 0x01,
+			PURPLE_ROOMLIST_ROOMTYPE_ROOM = 0x02
+		};
+
+		public enum PurpleRoomlistFieldType
+		{
+			PURPLE_ROOMLIST_FIELD_BOOL,
+			PURPLE_ROOMLIST_FIELD_INT,
+			PURPLE_ROOMLIST_FIELD_STRING
+		};
+
+
+		/*
+		 * Function Name: purple_roomlist_show_with_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_show_with_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_show_with_account(IntPtr account);
+
+		public static void ShowWithAccount(PurpleAccount account)
+		{
+			purple_roomlist_show_with_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_new
+		 * Function Type: PurpleRoomlist *
+		 * Function RawType: PurpleRoomlist
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlist * purple_roomlist_new(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_new(IntPtr account);
+
+		public static PurpleRoomlist New(PurpleAccount account)
+		{
+			return new PurpleRoomlist(purple_roomlist_new(account.Reference));
+		}
+
+		/*
+		 * Function Name: purple_roomlist_ref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_ref(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_ref(IntPtr list);
+
+		public static void Ref(PurpleRoomlist list)
+		{
+			purple_roomlist_ref(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_unref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_unref(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_unref(IntPtr list);
+
+		public static void Unref(PurpleRoomlist list)
+		{
+			purple_roomlist_unref(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_set_fields
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_set_fields(PurpleRoomlist * list, GList * fields)
+		 * 
+		 * Could not generate a wrapper for purple_roomlist_set_fields in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_roomlist_set_in_progress
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_set_in_progress(PurpleRoomlist * list, gboolean in_progress)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_set_in_progress(IntPtr list, bool in_progress);
+
+		public static void SetInProgress(PurpleRoomlist list, bool in_progress)
+		{
+			purple_roomlist_set_in_progress(list.Reference, in_progress);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_in_progress
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_roomlist_get_in_progress(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_roomlist_get_in_progress(IntPtr list);
+
+		public static bool GetInProgress(PurpleRoomlist list)
+		{
+			return purple_roomlist_get_in_progress(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_room_add(PurpleRoomlist * list, PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_room_add(IntPtr list, IntPtr room);
+
+		public static void RoomAdd(PurpleRoomlist list, PurpleRoomlistRoom room)
+		{
+			purple_roomlist_room_add(list.Reference, room.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_list
+		 * Function Type: PurpleRoomlist *
+		 * Function RawType: PurpleRoomlist
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlist * purple_roomlist_get_list(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_get_list(IntPtr gc);
+
+		public static PurpleRoomlist GetList(PurpleConnection gc)
+		{
+			return new PurpleRoomlist(purple_roomlist_get_list(gc.Reference));
+		}
+
+		/*
+		 * Function Name: purple_roomlist_cancel_get_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_cancel_get_list(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_cancel_get_list(IntPtr list);
+
+		public static void CancelGetList(PurpleRoomlist list)
+		{
+			purple_roomlist_cancel_get_list(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_expand_category
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_expand_category(PurpleRoomlist * list, PurpleRoomlistRoom * category)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_expand_category(IntPtr list, IntPtr category);
+
+		public static void ExpandCategory(PurpleRoomlist list, PurpleRoomlistRoom category)
+		{
+			purple_roomlist_expand_category(list.Reference, category.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_roomlist_get_fields(PurpleRoomlist * roomlist)
+		 * 
+		 * Could not generate a wrapper for purple_roomlist_get_fields in file "roomlist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_roomlist_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_roomlist_room_add_field
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_room_add_field(PurpleRoomlist * list, PurpleRoomlistRoom * room, gconstpointer field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_room_add_field(IntPtr list, IntPtr room, IntPtr field);
+
+		public static void RoomAddField(PurpleRoomlist list, PurpleRoomlistRoom room, IntPtr field)
+		{
+			purple_roomlist_room_add_field(list.Reference, room.Reference, field);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_join
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_room_join(PurpleRoomlist * list, PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_room_join(IntPtr list, IntPtr room);
+
+		public static void RoomJoin(PurpleRoomlist list, PurpleRoomlistRoom room)
+		{
+			purple_roomlist_room_join(list.Reference, room.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_type
+		 * Function Type: PurpleRoomlistRoomType
+		 * Function RawType: PurpleRoomlistRoomType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleRoomlistRoomType purple_roomlist_room_get_type(PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Roomlist.PurpleRoomlistRoomType purple_roomlist_room_get_type(IntPtr room);
+
+		public static Roomlist.PurpleRoomlistRoomType RoomGetType(PurpleRoomlistRoom room)
+		{
+			/* Unable to process the return value of purple_roomlist_room_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_roomlist_room_get_name(PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_roomlist_room_get_name(IntPtr room);
+
+		public static string RoomGetName(PurpleRoomlistRoom room)
+		{
+			return purple_roomlist_room_get_name(room.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_parent
+		 * Function Type: PurpleRoomlistRoom *
+		 * Function RawType: PurpleRoomlistRoom
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlistRoom * purple_roomlist_room_get_parent(PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_room_get_parent(IntPtr room);
+
+		public static PurpleRoomlistRoom RoomGetParent(PurpleRoomlistRoom room)
+		{
+			return new PurpleRoomlistRoom(purple_roomlist_room_get_parent(room.Reference));
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_roomlist_room_get_fields(PurpleRoomlistRoom * room)
+		 * 
+		 * Could not generate a wrapper for purple_roomlist_room_get_fields in file "roomlist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_roomlist_room_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_roomlist_field_get_type
+		 * Function Type: PurpleRoomlistFieldType
+		 * Function RawType: PurpleRoomlistFieldType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleRoomlistFieldType purple_roomlist_field_get_type(PurpleRoomlistField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Roomlist.PurpleRoomlistFieldType purple_roomlist_field_get_type(IntPtr field);
+
+		public static Roomlist.PurpleRoomlistFieldType FieldGetType(PurpleRoomlistField field)
+		{
+			/* Unable to process the return value of purple_roomlist_field_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_roomlist_field_get_label
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_roomlist_field_get_label(PurpleRoomlistField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_roomlist_field_get_label(IntPtr field);
+
+		public static string FieldGetLabel(PurpleRoomlistField field)
+		{
+			return purple_roomlist_field_get_label(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_field_get_hidden
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_roomlist_field_get_hidden(PurpleRoomlistField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_roomlist_field_get_hidden(IntPtr field);
+
+		public static bool FieldGetHidden(PurpleRoomlistField field)
+		{
+			return purple_roomlist_field_get_hidden(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_set_ui_ops(PurpleRoomlistUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleRoomlistUiOps ops)
+		{
+			purple_roomlist_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_ui_ops
+		 * Function Type: PurpleRoomlistUiOps *
+		 * Function RawType: PurpleRoomlistUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlistUiOps * purple_roomlist_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_get_ui_ops();
+
+		public static PurpleRoomlistUiOps GetUiOps()
+		{
+			return new PurpleRoomlistUiOps(purple_roomlist_get_ui_ops());
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Savedstatuses.cs	44d737ddd6227b0b10d095a385507ce4958e4c9b
+++ libpurple/wrapper/Savedstatuses.cs	44d737ddd6227b0b10d095a385507ce4958e4c9b
@@ -0,0 +1,503 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: savedstatuses.h
+	 */
+	public class Savedstatuses
+	{
+
+		/*
+		 * Function Name: purple_savedstatus_delete
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_delete(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_delete(string title);
+
+		public static bool SavedstatusDelete(string title)
+		{
+			return purple_savedstatus_delete(title);
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_delete_by_status
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_delete_by_status(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_delete_by_status(IntPtr saved_status);
+
+		public static void SavedstatusDeleteByStatus(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_savedstatuses_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_savedstatuses_get_all in file "savedstatuses.h".
+		 * Message: Unknown inner-type of argument 0 of purple_savedstatuses_get_all
+		 */
+
+		/*
+		 * Function Name: purple_savedstatuses_get_popular
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_savedstatuses_get_popular(unsigned int how_many)
+		 * 
+		 * Could not generate a wrapper for purple_savedstatuses_get_popular in file "savedstatuses.h".
+		 * Message: Unknown inner-type of argument 0 of purple_savedstatuses_get_popular
+		 */
+
+		/*
+		 * Function Name: purple_savedstatus_get_current
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_current()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_current();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetCurrent()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_current, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_default
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_default()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_default();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetDefault()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_default, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_idleaway
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_idleaway()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_idleaway();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetIdleaway()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_idleaway, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_is_idleaway
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_is_idleaway()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_is_idleaway();
+
+		public static bool SavedstatusIsIdleaway()
+		{
+			return purple_savedstatus_is_idleaway();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_set_idleaway
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_set_idleaway(gboolean idleaway)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_set_idleaway(bool idleaway);
+
+		public static void SavedstatusSetIdleaway(bool idleaway)
+		{
+			purple_savedstatus_set_idleaway(idleaway);
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_startup
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_startup()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_startup();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetStartup()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_startup, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_find
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_find(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_find(string title);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusFind(string title)
+		{
+			/* Unable to process the return value of purple_savedstatus_find, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_find_by_creation_time
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_find_by_creation_time(time_t creation_time)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_find_by_creation_time(ulong creation_time);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusFindByCreationTime(DateTime creation_time)
+		{
+			ulong _PurpleWrapper_param0 = (ulong)(creation_time - new DateTime(1970, 1, 1)).TotalSeconds;
+			/* Unable to process the return value of purple_savedstatus_find_by_creation_time, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_find_transient_by_type_and_message
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_find_transient_by_type_and_message(PurpleStatusPrimitive type, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_find_transient_by_type_and_message(Status.PurpleStatusPrimitive type, string message);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusFindTransientByTypeAndMessage(Status.PurpleStatusPrimitive type, string message)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_is_transient
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_is_transient(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_is_transient(IntPtr saved_status);
+
+		public static bool SavedstatusIsTransient(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_title
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_savedstatus_get_title(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_savedstatus_get_title(IntPtr saved_status);
+
+		public static string SavedstatusGetTitle(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_type
+		 * Function Type: PurpleStatusPrimitive
+		 * Function RawType: PurpleStatusPrimitive
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleStatusPrimitive purple_savedstatus_get_type(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Status.PurpleStatusPrimitive purple_savedstatus_get_type(IntPtr saved_status);
+
+		public static Status.PurpleStatusPrimitive SavedstatusGetType(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_message
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_savedstatus_get_message(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_savedstatus_get_message(IntPtr saved_status);
+
+		public static string SavedstatusGetMessage(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_creation_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_savedstatus_get_creation_time(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_savedstatus_get_creation_time(IntPtr saved_status);
+
+		public static DateTime SavedstatusGetCreationTime(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_has_substatuses
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_has_substatuses(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_has_substatuses(IntPtr saved_status);
+
+		public static bool SavedstatusHasSubstatuses(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_substatus_get_type
+		 * Function Type: PurpleStatusType *
+		 * Function RawType: PurpleStatusType
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStatusType * purple_savedstatus_substatus_get_type(PurpleSavedStatusSub * substatus)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_substatus_get_type(IntPtr substatus);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr SavedstatusSubstatusGetType(/* Resolved as PointerToUnknownStruct to PurpleSavedStatusSub */ IntPtr substatus)
+		{
+			/* Unable to process substatus, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_substatus_get_message
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_savedstatus_substatus_get_message(PurpleSavedStatusSub * substatus)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_savedstatus_substatus_get_message(IntPtr substatus);
+
+		public static string SavedstatusSubstatusGetMessage(/* Resolved as PointerToUnknownStruct to PurpleSavedStatusSub */ IntPtr substatus)
+		{
+			/* Unable to process substatus, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_activate
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_activate(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_activate(IntPtr saved_status);
+
+		public static void SavedstatusActivate(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_activate_for_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_activate_for_account(PurpleSavedStatus * saved_status, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_activate_for_account(IntPtr saved_status, IntPtr account);
+
+		public static void SavedstatusActivateForAccount(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status, PurpleAccount account)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_savedstatuses_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatuses_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_savedstatuses_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatuses_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatuses_init();
+
+		public static void Init()
+		{
+			purple_savedstatuses_init();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatuses_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatuses_uninit();
+
+		public static void Uninit()
+		{
+			purple_savedstatuses_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Server.cs	ec1cfa4837a4164119fa9e7d5abb2b6a6185fa5d
+++ libpurple/wrapper/Server.cs	ec1cfa4837a4164119fa9e7d5abb2b6a6185fa5d
@@ -0,0 +1,487 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: server.h
+	 */
+	public class Server
+	{
+
+		/*
+		 * Function Name: serv_send_typing
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int serv_send_typing(PurpleConnection * gc, char * name, PurpleTypingState state)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint serv_send_typing(IntPtr gc, string name, Conversation.PurpleTypingState state);
+
+		public static uint ServSendTyping(PurpleConnection gc, string name, Conversation.PurpleTypingState state)
+		{
+			/* Unable to process state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_move_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_move_buddy(PurpleBuddy * , PurpleGroup * , PurpleGroup * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_move_buddy(IntPtr _PurpleWrapper_arg0, IntPtr _PurpleWrapper_arg1, IntPtr _PurpleWrapper_arg2);
+
+		public static void ServMoveBuddy(PurpleBuddy _PurpleWrapper_arg0, PurpleGroup _PurpleWrapper_arg1, PurpleGroup _PurpleWrapper_arg2)
+		{
+			serv_move_buddy(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1.Reference, _PurpleWrapper_arg2.Reference);
+		}
+
+		/*
+		 * Function Name: serv_send_im
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int serv_send_im(PurpleConnection * , char * , char * , PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int serv_send_im(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags);
+
+		public static int ServSendIm(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_get_attention_type_from_code
+		 * Function Type: PurpleAttentionType *
+		 * Function RawType: PurpleAttentionType
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAttentionType * purple_get_attention_type_from_code(PurpleAccount * account, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_get_attention_type_from_code(IntPtr account, uint type_code);
+
+		public static PurpleAttentionType GetAttentionTypeFromCode(PurpleAccount account, uint type_code)
+		{
+			return new PurpleAttentionType(purple_get_attention_type_from_code(account.Reference, type_code));
+		}
+
+		/*
+		 * Function Name: serv_send_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_send_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_send_attention(IntPtr gc, string who, uint type_code);
+
+		public static void ServSendAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			serv_send_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: serv_got_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_attention(IntPtr gc, string who, uint type_code);
+
+		public static void ServGotAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			serv_got_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: serv_get_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_get_info(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_get_info(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServGetInfo(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_get_info(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_set_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_set_info(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_set_info(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServSetInfo(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_set_info(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_add_permit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_add_permit(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_add_permit(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServAddPermit(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_add_permit(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_add_deny
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_add_deny(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_add_deny(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServAddDeny(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_add_deny(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_rem_permit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_rem_permit(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_rem_permit(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServRemPermit(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_rem_permit(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_rem_deny
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_rem_deny(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_rem_deny(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServRemDeny(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_rem_deny(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_set_permit_deny
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_set_permit_deny(PurpleConnection * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_set_permit_deny(IntPtr _PurpleWrapper_arg0);
+
+		public static void ServSetPermitDeny(PurpleConnection _PurpleWrapper_arg0)
+		{
+			serv_set_permit_deny(_PurpleWrapper_arg0.Reference);
+		}
+
+		/*
+		 * Function Name: serv_chat_invite
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_chat_invite(PurpleConnection * ,  , char * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_chat_invite(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3);
+
+		public static void ServChatInvite(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3)
+		{
+			/* Unable to process , a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_chat_leave
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_chat_leave(PurpleConnection * ,  )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_chat_leave(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1);
+
+		public static void ServChatLeave(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1)
+		{
+			/* Unable to process , a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_chat_whisper
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_chat_whisper(PurpleConnection * ,  , char * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_chat_whisper(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3);
+
+		public static void ServChatWhisper(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3)
+		{
+			/* Unable to process , a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_chat_send
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int serv_chat_send(PurpleConnection * ,  , char * , PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int serv_chat_send(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags);
+
+		public static int ServChatSend(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process , a Unknown. */
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_alias_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_alias_buddy(PurpleBuddy * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_alias_buddy(IntPtr _PurpleWrapper_arg0);
+
+		public static void ServAliasBuddy(PurpleBuddy _PurpleWrapper_arg0)
+		{
+			serv_alias_buddy(_PurpleWrapper_arg0.Reference);
+		}
+
+		/*
+		 * Function Name: serv_got_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_alias(PurpleConnection * gc, char * who, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_alias(IntPtr gc, string who, string alias);
+
+		public static void ServGotAlias(PurpleConnection gc, string who, string alias)
+		{
+			serv_got_alias(gc.Reference, who, alias);
+		}
+
+		/*
+		 * Function Name: purple_serv_got_private_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_serv_got_private_alias(PurpleConnection * gc, char * who, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_serv_got_private_alias(IntPtr gc, string who, string alias);
+
+		public static void ServGotPrivateAlias(PurpleConnection gc, string who, string alias)
+		{
+			purple_serv_got_private_alias(gc.Reference, who, alias);
+		}
+
+		/*
+		 * Function Name: serv_got_typing_stopped
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_typing_stopped(PurpleConnection * gc, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_typing_stopped(IntPtr gc, string name);
+
+		public static void ServGotTypingStopped(PurpleConnection gc, string name)
+		{
+			serv_got_typing_stopped(gc.Reference, name);
+		}
+
+		/*
+		 * Function Name: serv_join_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_join_chat(PurpleConnection * , GHashTable * data)
+		 * 
+		 * Could not generate a wrapper for serv_join_chat in file "server.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: serv_reject_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_reject_chat(PurpleConnection * , GHashTable * data)
+		 * 
+		 * Could not generate a wrapper for serv_reject_chat in file "server.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_serv_got_join_chat_failed
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_serv_got_join_chat_failed(PurpleConnection * gc, GHashTable * data)
+		 * 
+		 * Could not generate a wrapper for purple_serv_got_join_chat_failed in file "server.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: serv_got_chat_left
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_chat_left(PurpleConnection * g, int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_chat_left(IntPtr g, int id);
+
+		public static void ServGotChatLeft(PurpleConnection g, int id)
+		{
+			serv_got_chat_left(g.Reference, id);
+		}
+
+		/*
+		 * Function Name: serv_send_file
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_send_file(PurpleConnection * gc, char * who, char * file)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_send_file(IntPtr gc, string who, string file);
+
+		public static void ServSendFile(PurpleConnection gc, string who, string file)
+		{
+			serv_send_file(gc.Reference, who, file);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Signals.cs	5ce5840147945ca3b82efb535b88fba2ef0610f2
+++ libpurple/wrapper/Signals.cs	5ce5840147945ca3b82efb535b88fba2ef0610f2
@@ -0,0 +1,155 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: signals.h
+	 */
+	public class Signals
+	{
+		public delegate void PurpleCallback();
+		public delegate void PurpleSignalMarshalFunc(IntPtr cb, /* Unresolved: [Category: Unknown], [Name: va_list args] */ IntPtr args, IntPtr data, IntPtr return_val);
+
+		/*
+		 * Function Name: purple_signal_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signal_unregister(void * instance, char * signal)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signal_unregister(IntPtr instance, string signal);
+
+		public static void SignalUnregister(IntPtr instance, string signal)
+		{
+			purple_signal_unregister(instance, signal);
+		}
+
+		/*
+		 * Function Name: purple_signals_unregister_by_instance
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_unregister_by_instance(void * instance)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_unregister_by_instance(IntPtr instance);
+
+		public static void UnregisterByInstance(IntPtr instance)
+		{
+			purple_signals_unregister_by_instance(instance);
+		}
+
+		/*
+		 * Function Name: purple_signals_disconnect_by_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_disconnect_by_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_disconnect_by_handle(IntPtr handle);
+
+		public static void DisconnectByHandle(IntPtr handle)
+		{
+			purple_signals_disconnect_by_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_signal_emit_vargs
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signal_emit_vargs(void * instance, char * signal, va_list args)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signal_emit_vargs(IntPtr instance, string signal, /* Unresolved: [Category: Unknown], [Name: va_list args] */ IntPtr args);
+
+		public static void SignalEmitVargs(IntPtr instance, string signal, /* Unresolved: [Category: Unknown], [Name: va_list args] */ IntPtr args)
+		{
+			/* Unable to process args, a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_signals_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_init();
+
+		public static void Init()
+		{
+			purple_signals_init();
+		}
+
+		/*
+		 * Function Name: purple_signals_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_uninit();
+
+		public static void Uninit()
+		{
+			purple_signals_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Smiley.cs	1698f8bde3d5f1da93e087572170f108ea358967
+++ libpurple/wrapper/Smiley.cs	1698f8bde3d5f1da93e087572170f108ea358967
@@ -0,0 +1,349 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: smiley.h
+	 */
+	public class Smiley
+	{
+
+		/*
+		 * Function Name: purple_smiley_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_smiley_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_get_type();
+
+		public static /* libobject */ IntPtr GetType()
+		{
+			/* Unable to process the return value of purple_smiley_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_new
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smiley_new(PurpleStoredImage * img, char * shortcut)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_new(IntPtr img, string shortcut);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr New(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img, string shortcut)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_new_from_file
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smiley_new_from_file(char * shortcut, char * filepath)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_new_from_file(string shortcut, string filepath);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr NewFromFile(string shortcut, string filepath)
+		{
+			/* Unable to process the return value of purple_smiley_new_from_file, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_delete
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_smiley_delete(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_smiley_delete(IntPtr smiley);
+
+		public static void Delete(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_set_shortcut
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_smiley_set_shortcut(PurpleSmiley * smiley, char * shortcut)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_smiley_set_shortcut(IntPtr smiley, string shortcut);
+
+		public static bool SetShortcut(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley, string shortcut)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_shortcut
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_shortcut(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_shortcut(IntPtr smiley);
+
+		public static string GetShortcut(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_checksum
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_checksum(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_checksum(IntPtr smiley);
+
+		public static string GetChecksum(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_stored_image
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_smiley_get_stored_image(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_get_stored_image(IntPtr smiley);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr GetStoredImage(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_data
+		 * Function Type: gconstpointer
+		 * Function RawType: gconstpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gconstpointer purple_smiley_get_data(PurpleSmiley * smiley, size_t * len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_get_data(IntPtr smiley, IntPtr len);
+
+		public static IntPtr GetData(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley, /* Resolved as PointerToUnknownStruct to size_t */ IntPtr len)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			/* Unable to process len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_extension
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_extension(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_extension(IntPtr smiley);
+
+		public static string GetExtension(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_full_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_full_path(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_full_path(IntPtr smiley);
+
+		public static string GetFullPath(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smileys_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_smileys_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_smileys_get_all in file "smiley.h".
+		 * Message: Unknown inner-type of argument 0 of purple_smileys_get_all
+		 */
+
+		/*
+		 * Function Name: purple_smileys_find_by_shortcut
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smileys_find_by_shortcut(char * shortcut)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smileys_find_by_shortcut(string shortcut);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr SmileysFindByShortcut(string shortcut)
+		{
+			/* Unable to process the return value of purple_smileys_find_by_shortcut, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smileys_find_by_checksum
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smileys_find_by_checksum(char * checksum)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smileys_find_by_checksum(string checksum);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr SmileysFindByChecksum(string checksum)
+		{
+			/* Unable to process the return value of purple_smileys_find_by_checksum, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smileys_get_storing_dir
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smileys_get_storing_dir()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smileys_get_storing_dir();
+
+		public static string SmileysGetStoringDir()
+		{
+			return purple_smileys_get_storing_dir();
+		}
+
+		/*
+		 * Function Name: purple_smileys_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_smileys_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_smileys_init();
+
+		public static void SmileysInit()
+		{
+			purple_smileys_init();
+		}
+
+		/*
+		 * Function Name: purple_smileys_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_smileys_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_smileys_uninit();
+
+		public static void SmileysUninit()
+		{
+			purple_smileys_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Sound.cs	fc64187c425037e587606410686ae9ab1e062f05
+++ libpurple/wrapper/Sound.cs	fc64187c425037e587606410686ae9ab1e062f05
@@ -0,0 +1,186 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound.h
+	 */
+	public class Sound
+	{
+		public enum PurpleSoundEventID
+		{
+			PURPLE_SOUND_BUDDY_ARRIVE = 0,
+			PURPLE_SOUND_BUDDY_LEAVE,
+			PURPLE_SOUND_RECEIVE,
+			PURPLE_SOUND_FIRST_RECEIVE,
+			PURPLE_SOUND_SEND,
+			PURPLE_SOUND_CHAT_JOIN,
+			PURPLE_SOUND_CHAT_LEAVE,
+			PURPLE_SOUND_CHAT_YOU_SAY,
+			PURPLE_SOUND_CHAT_SAY,
+			PURPLE_SOUND_POUNCE_DEFAULT,
+			PURPLE_SOUND_CHAT_NICK,
+			PURPLE_NUM_SOUNDS
+		};
+
+
+		/*
+		 * Function Name: purple_sound_play_file
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_play_file(char * filename, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_play_file(string filename, IntPtr account);
+
+		public static void PlayFile(string filename, PurpleAccount account)
+		{
+			purple_sound_play_file(filename, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_sound_play_event
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_play_event(PurpleSoundEventID event, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_play_event(Sound.PurpleSoundEventID event_, IntPtr account);
+
+		public static void PlayEvent(Sound.PurpleSoundEventID event_, PurpleAccount account)
+		{
+			/* Unable to process event, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_sound_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_set_ui_ops(PurpleSoundUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleSoundUiOps ops)
+		{
+			purple_sound_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_sound_get_ui_ops
+		 * Function Type: PurpleSoundUiOps *
+		 * Function RawType: PurpleSoundUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleSoundUiOps * purple_sound_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sound_get_ui_ops();
+
+		public static PurpleSoundUiOps GetUiOps()
+		{
+			return new PurpleSoundUiOps(purple_sound_get_ui_ops());
+		}
+
+		/*
+		 * Function Name: purple_sound_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_init();
+
+		public static void Init()
+		{
+			purple_sound_init();
+		}
+
+		/*
+		 * Function Name: purple_sound_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_uninit();
+
+		public static void Uninit()
+		{
+			purple_sound_uninit();
+		}
+
+		/*
+		 * Function Name: purple_sounds_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_sounds_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sounds_get_handle();
+
+		public static IntPtr SoundsGetHandle()
+		{
+			return purple_sounds_get_handle();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/SoundTheme.cs	f53b4b8770f37ecc2eb021c55829789c0362a0b3
+++ libpurple/wrapper/SoundTheme.cs	f53b4b8770f37ecc2eb021c55829789c0362a0b3
@@ -0,0 +1,68 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme.h
+	 */
+	public class SoundTheme
+	{
+
+		/*
+		 * Function Name: purple_sound_theme_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_sound_theme_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sound_theme_get_type();
+
+		public static /* libobject */ IntPtr SoundThemeGetType()
+		{
+			/* Unable to process the return value of purple_sound_theme_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/SoundThemeLoader.cs	58c7a1b4421ff84c528532d121ff9a5e89fecfef
+++ libpurple/wrapper/SoundThemeLoader.cs	58c7a1b4421ff84c528532d121ff9a5e89fecfef
@@ -0,0 +1,68 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme-loader.h
+	 */
+	public class SoundThemeLoader
+	{
+
+		/*
+		 * Function Name: purple_sound_theme_loader_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_sound_theme_loader_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sound_theme_loader_get_type();
+
+		public static /* libobject */ IntPtr SoundThemeLoaderGetType()
+		{
+			/* Unable to process the return value of purple_sound_theme_loader_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Sslconn.cs	d35ded8ce86fc7aae5a2f36ed51eb431cb6229fa
+++ libpurple/wrapper/Sslconn.cs	d35ded8ce86fc7aae5a2f36ed51eb431cb6229fa
@@ -0,0 +1,228 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sslconn.h
+	 */
+	public class Sslconn
+	{
+		public enum PurpleSslErrorType
+		{
+			PURPLE_SSL_HANDSHAKE_FAILED = 1,
+			PURPLE_SSL_CONNECT_FAILED = 2,
+			PURPLE_SSL_CERTIFICATE_INVALID = 3
+		};
+
+		public delegate void PurpleSslInputFunction(/* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg0, IntPtr _PurpleWrapper_arg1, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg2);
+		public delegate void PurpleSslErrorFunction(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg2);
+
+		/*
+		 * Function Name: purple_ssl_is_supported
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_ssl_is_supported()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_ssl_is_supported();
+
+		public static bool SslIsSupported()
+		{
+			return purple_ssl_is_supported();
+		}
+
+		/*
+		 * Function Name: purple_ssl_strerror
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_ssl_strerror(PurpleSslErrorType error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_ssl_strerror(Sslconn.PurpleSslErrorType error);
+
+		public static string SslStrerror(Sslconn.PurpleSslErrorType error)
+		{
+			/* Unable to process error, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ssl_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_close(PurpleSslConnection * gsc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_close(IntPtr gsc);
+
+		public static void SslClose(PurpleSslConnection gsc)
+		{
+			purple_ssl_close(gsc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_ssl_read
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_ssl_read(PurpleSslConnection * gsc, void * buffer, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_ssl_read(IntPtr gsc, IntPtr buffer, ulong len);
+
+		public static ulong SslRead(PurpleSslConnection gsc, IntPtr buffer, ulong len)
+		{
+			return purple_ssl_read(gsc.Reference, buffer, len);
+		}
+
+		/*
+		 * Function Name: purple_ssl_write
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_ssl_write(PurpleSslConnection * gsc, void * buffer, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_ssl_write(IntPtr gsc, IntPtr buffer, ulong len);
+
+		public static ulong SslWrite(PurpleSslConnection gsc, IntPtr buffer, ulong len)
+		{
+			return purple_ssl_write(gsc.Reference, buffer, len);
+		}
+
+		/*
+		 * Function Name: purple_ssl_get_peer_certificates
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_ssl_get_peer_certificates(PurpleSslConnection * gsc)
+		 * 
+		 * Could not generate a wrapper for purple_ssl_get_peer_certificates in file "sslconn.h".
+		 * Message: Unknown inner-type of argument 0 of purple_ssl_get_peer_certificates
+		 */
+
+		/*
+		 * Function Name: purple_ssl_set_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_set_ops(PurpleSslOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_set_ops(IntPtr ops);
+
+		public static void SslSetOps(/* Resolved as PointerToUnknownStruct to PurpleSslOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ssl_get_ops
+		 * Function Type: PurpleSslOps *
+		 * Function RawType: PurpleSslOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSslOps * purple_ssl_get_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ssl_get_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSslOps */ IntPtr SslGetOps()
+		{
+			/* Unable to process the return value of purple_ssl_get_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ssl_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_init();
+
+		public static void SslInit()
+		{
+			purple_ssl_init();
+		}
+
+		/*
+		 * Function Name: purple_ssl_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_uninit();
+
+		publi