diff options
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(); +} |