diff options
| author | Jelmer Vernooij <jelmer@samba.org> | 2005-11-07 17:20:37 +0100 | 
|---|---|---|
| committer | Jelmer Vernooij <jelmer@samba.org> | 2005-11-07 17:20:37 +0100 | 
| commit | d1d677615e12d759b6cdf7ce23a493bc055ef37f (patch) | |
| tree | 4d8057d95746de6f409290486e37f96e4bec209d /win32/bitlbeewin.cpp | |
| parent | f7f3ada3350c2a0a99ed307350a230583802cfe0 (diff) | |
Import win32 branch
Diffstat (limited to 'win32/bitlbeewin.cpp')
| -rw-r--r-- | win32/bitlbeewin.cpp | 210 | 
1 files changed, 210 insertions, 0 deletions
| diff --git a/win32/bitlbeewin.cpp b/win32/bitlbeewin.cpp new file mode 100644 index 00000000..e18ae3cd --- /dev/null +++ b/win32/bitlbeewin.cpp @@ -0,0 +1,210 @@ +// bitlbee.cpp : Defines the class behaviors for the application. +// +
 +#define BITLBEE_CORE +#include "bitlbeewin.h" +#include "traynot.h" +#include "maindlg.h"
 +#include <afxsock.h> +extern "C" { +#include "config.h" +#include "bitlbee.h" +#include <stdarg.h> +#include <gmodule.h>
 +int
 +inet_aton(const char *cp, struct in_addr *addr)
 +{
 +  addr->s_addr = inet_addr(cp);
 +  return (addr->s_addr == INADDR_NONE) ? 0 : 1;
 +}
 +
 +void glib_logger (const gchar *log_domain, GLogLevelFlags log_level, const gchar *msg, gpointer user_data);
 + +} + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CBitlbeeApp + +BEGIN_MESSAGE_MAP(CBitlbeeApp, CWinApp) +	//{{AFX_MSG_MAP(CBitlbeeApp) +	ON_COMMAND(IDM_EXIT, OnExit) +	ON_COMMAND(IDM_SHOW, OnShow) +	//}}AFX_MSG_MAP +	ON_COMMAND(ID_HELP, CWinApp::OnHelp) +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CBitlbeeApp construction + +CBitlbeeApp::CBitlbeeApp() +{ +	// TODO: add construction code here, +	// Place all significant initialization in InitInstance +} + +///////////////////////////////////////////////////////////////////////////// +// The one and only CBitlbeeApp object + +CBitlbeeApp theApp; + +///////////////////////////////////////////////////////////////////////////// +// CBitlbeeApp initialization
 +
 +static UINT bb_loop(LPVOID data)
 +{
 +	g_main_run(global.loop);
 +	return 0;
 +} +
 + +gboolean bitlbee_new_client(GIOChannel *src, GIOCondition cond, gpointer data); +global_t global; // Against global namespace pollution
 + +BOOL CBitlbeeApp::InitInstance() +{ +	if (!AfxSocketInit()) +	{ +		AfxMessageBox(IDP_SOCKETS_INIT_FAILED); +		return FALSE; +	} + +	// Standard initialization +	// If you are not using these features and wish to reduce the size +	//  of your final executable, you should remove from the following +	//  the specific initialization routines you do not need. + +#ifdef _AFXDLL +	Enable3dControls();			// Call this when using MFC in a shared DLL +#else +	Enable3dControlsStatic();	// Call this when linking to MFC statically +#endif +	 +	HKEY key; +	unsigned char databuf[256]; +	DWORD len; +	RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Bitlbee", &key); +	 +	memset( &global, 0, sizeof( global_t ) );
 +	g_log_set_handler("GLib", static_cast<GLogLevelFlags>(G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), glib_logger, NULL);
 +	global.loop = g_main_new(FALSE); +	nogaim_init(); + +	SetRegistryKey("Bitlbee"); +	conf_t *conf = (conf_t *)g_new0( conf_t, 1 ); +	global.conf = conf; +	global.conf->iface = g_strdup(GetProfileString("main", "interface", "0.0.0.0")); +	global.conf->port = GetProfileInt("main", "port", 6667); +	global.conf->verbose = GetProfileInt("main", "verbose", 0); +	global.conf->password = g_strdup(GetProfileString("main", "password", ""));
 +	global.conf->ping_interval = GetProfileInt("main", "ping_interval_timeout", 60); +	global.conf->hostname = g_strdup(GetProfileString("main", "hostname", "localhost")); +	if(RegQueryValueEx(key, "configdir", NULL, NULL, databuf, &len) != ERROR_SUCCESS) strcpy((char *)databuf, ""); +	global.conf->configdir = g_strdup(GetProfileString("main", "configdir", (char *)databuf)); +	if(RegQueryValueEx(key, "motdfile", NULL, NULL, databuf, &len) != ERROR_SUCCESS) strcpy((char *)databuf, ""); +	global.conf->motdfile = g_strdup(GetProfileString("main", "motdfile", (char *)databuf)); +	if(RegQueryValueEx(key, "helpfile", NULL, NULL, databuf, &len) != ERROR_SUCCESS) strcpy((char *)databuf, ""); +	global.helpfile = g_strdup(GetProfileString("main", "helpfile", (char *)databuf)); +	global.conf->runmode = RUNMODE_DAEMON; +	global.conf->authmode = (enum authmode) GetProfileInt("main", "AuthMode", AUTHMODE_CLOSED); +	strcpy(proxyhost, GetProfileString("proxy", "host", ""));
 +	strcpy(proxyuser, GetProfileString("proxy", "user", ""));
 +	strcpy(proxypass, GetProfileString("proxy", "password", ""));
 +	proxytype = GetProfileInt("proxy", "type", PROXY_NONE);
 +	proxyport = GetProfileInt("proxy", "port", 3128);
 + +	dlg = new CMainDlg(); +	not = new CTrayNot(dlg); +	dlg->ShowWindow(SW_HIDE); +	m_pMainWnd = not;	 + +	if(help_init(&(global.help)) == NULL) { +		log_message(LOGLVL_WARNING, "Unable to initialize help"); +	} +	 +	if(bitlbee_daemon_init() != 0) { +		return FALSE; +	} + +	AfxBeginThread(bb_loop, NULL); + + +	return TRUE; +} + +void log_error(char *a) { +	::MessageBox(NULL, a, "Bitlbee error", MB_OK | MB_ICONEXCLAMATION); +} + +/* Dummy function. log output always goes to screen anyway */ +void log_link(int level, int out) {} + +void conf_loaddefaults(irc_t *irc) {} +double gettime() {  +	return CTime::GetCurrentTime().GetTime(); +} + +void load_protocol(char *name, char *init_function_name, struct prpl *p) { +	void (*init_function) (struct prpl *); + +	char *path = g_module_build_path(NULL, name); +	if(!path) { +		log_message(LOGLVL_WARNING, "Can't build path for %s\n", name); +		return; +	} + +	GModule *mod = g_module_open(path, G_MODULE_BIND_LAZY); +	if(!mod) { +		log_message(LOGLVL_INFO, "Can't find %s, not loading", name); +		return; +	} + +	if(!g_module_symbol(mod,init_function_name,(void **) &init_function)) { +		log_message(LOGLVL_WARNING, "Can't find function %s in %s\n", init_function_name, path); +		return; +	} +	g_free(path); + +	init_function(p); +} + +void jabber_init(struct prpl *p) { load_protocol("jabber", "jabber_init", p); } +void msn_init(struct prpl *p) { load_protocol("msn", "msn_init", p); } +void byahoo_init(struct prpl *p) { load_protocol("yahoo", "byahoo_init", p); } +void oscar_init(struct prpl *p) { load_protocol("oscar", "oscar_init", p); } + +void CBitlbeeApp::OnExit()  +{ +	AfxGetApp()->ExitInstance(); +	exit(0); +} + +void CBitlbeeApp::OnShow()  +{ +	dlg->ShowWindow(SW_SHOW); +} + +int CBitlbeeApp::ExitInstance()  +{ +	WriteProfileString("main", "interface", global.conf->iface); +	WriteProfileInt("main", "port", global.conf->port); +	WriteProfileInt("main", "verbose", global.conf->verbose); +	WriteProfileString("main", "password", global.conf->password); +	WriteProfileString("main", "configdir", global.conf->configdir); +	WriteProfileString("main", "hostname", global.conf->hostname); +	WriteProfileString("main", "motdfile", global.conf->motdfile); +	WriteProfileInt("main", "authmode", global.conf->authmode);
 +	WriteProfileInt("proxy", "type", proxytype);
 +	WriteProfileString("proxy", "host", proxyhost);
 +	WriteProfileString("proxy", "user", proxyuser);
 +	WriteProfileString("proxy", "password", proxypass);
 +	WriteProfileInt("proxy", "port", proxyport);
 +	WriteProfileInt("main", "ping_interval_timeout", global.conf->ping_interval); +	delete not; +	return CWinApp::ExitInstance(); +} | 
