summaryrefslogtreecommitdiff
path: root/Protocols
diff options
context:
space:
mode:
authorpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-12-15 04:27:30 +0000
committerpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-12-15 04:27:30 +0000
commit1cb7189cc9f3ff7a01a347b6f5be2483f541badd (patch)
treea73c299a113b7e2b0338feed96cf549c299ad1bb /Protocols
parent2886b3c6f7d50f479f74796ce9f8c6ba0356070c (diff)
iax: fix for shutdown
git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@181 c086bb3d-8645-0410-b8da-73a8550f86e7
Diffstat (limited to 'Protocols')
-rw-r--r--Protocols/IAX/IAXProto.cpp100
-rw-r--r--Protocols/IAX/IAXProto.h6
2 files changed, 75 insertions, 31 deletions
diff --git a/Protocols/IAX/IAXProto.cpp b/Protocols/IAX/IAXProto.cpp
index 6c11359..d374c26 100644
--- a/Protocols/IAX/IAXProto.cpp
+++ b/Protocols/IAX/IAXProto.cpp
@@ -35,18 +35,6 @@ IAXProto::IAXProto(const char *aProtoName, const TCHAR *aUserName)
m_szProtoName = mir_strdup(aProtoName);
m_szModuleName = mir_strdup(aProtoName);
- TCHAR buffer[MAX_PATH];
- mir_sntprintf(buffer, MAX_REGS(buffer), TranslateT("%s plugin connections"), m_tszUserName);
-
- NETLIBUSER nl_user = {0};
- nl_user.cbSize = sizeof(nl_user);
- nl_user.flags = NUF_OUTGOING | NUF_TCHAR;
- nl_user.szSettingsModule = m_szModuleName;
- nl_user.ptszDescriptiveName = buffer;
- hNetlibUser = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nl_user);
-
- CreateProtoService(PS_CREATEACCMGRUI, &IAXProto::CreateAccMgrUI);
-
static OptPageControl ctrls[] = {
{ NULL, CONTROL_TEXT, IDC_HOST, "Host", NULL, 0, 0, 256 },
{ NULL, CONTROL_INT, IDC_PORT, "Port", 4569, 0, 1 },
@@ -64,29 +52,12 @@ IAXProto::IAXProto(const char *aProtoName, const TCHAR *aUserName)
LoadOpts(accountManagerCtrls, MAX_REGS(accountManagerCtrls), m_szModuleName);
- iaxc_set_event_callback(&static_iaxc_callback, this);
-
- // TODO Handle network out port
- iaxc_set_preferred_source_udp_port(-1);
- if (iaxc_initialize(3))
- throw "!!";
-
- iaxc_set_formats(IAXC_FORMAT_SPEEX,
- IAXC_FORMAT_ULAW|IAXC_FORMAT_ALAW|IAXC_FORMAT_GSM|IAXC_FORMAT_SPEEX|IAXC_FORMAT_ILBC);
- iaxc_set_speex_settings(1,-1,-1,0,8000,3);
- iaxc_set_silence_threshold(-99);
-
- if (iaxc_start_processing_thread())
- throw "!!";
+ CreateProtoService(PS_CREATEACCMGRUI, &IAXProto::CreateAccMgrUI);
}
IAXProto::~IAXProto()
{
- iaxc_stop_processing_thread();
-
- iaxc_shutdown();
-
Netlib_CloseHandle(hNetlibUser);
mir_free(m_tszUserName);
@@ -419,3 +390,72 @@ static INT_PTR CALLBACK DlgProcAccMgrUI(HWND hwnd, UINT msg, WPARAM wParam, LPAR
proto->m_szModuleName, hwnd, msg, wParam, lParam);
}
+
+int __cdecl IAXProto::OnEvent( PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam )
+{
+ switch(iEventType)
+ {
+ case EV_PROTO_ONLOAD:
+ return OnModulesLoaded(0, 0);
+
+ case EV_PROTO_ONEXIT:
+ return OnPreShutdown(0, 0);
+
+ case EV_PROTO_ONOPTIONS:
+ return OnOptionsInit(wParam, lParam);
+
+ case EV_PROTO_ONRENAME:
+ {
+ break;
+ }
+ }
+ return 1;
+}
+
+
+int __cdecl IAXProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam)
+{
+ TCHAR buffer[MAX_PATH];
+ mir_sntprintf(buffer, MAX_REGS(buffer), TranslateT("%s plugin connections"), m_tszUserName);
+
+ NETLIBUSER nl_user = {0};
+ nl_user.cbSize = sizeof(nl_user);
+ nl_user.flags = NUF_INCOMING | NUF_OUTGOING | NUF_TCHAR;
+ nl_user.szSettingsModule = m_szModuleName;
+ nl_user.ptszDescriptiveName = buffer;
+ hNetlibUser = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nl_user);
+
+
+ iaxc_set_event_callback(&static_iaxc_callback, this);
+
+ // TODO Handle network out port
+ iaxc_set_preferred_source_udp_port(-1);
+ if (iaxc_initialize(3))
+ throw "!!";
+
+ iaxc_set_formats(IAXC_FORMAT_SPEEX,
+ IAXC_FORMAT_ULAW|IAXC_FORMAT_ALAW|IAXC_FORMAT_GSM|IAXC_FORMAT_SPEEX|IAXC_FORMAT_ILBC);
+ iaxc_set_speex_settings(1,-1,-1,0,8000,3);
+ iaxc_set_silence_threshold(-99);
+
+ if (iaxc_start_processing_thread())
+ throw "!!";
+
+ return 0;
+}
+
+
+int __cdecl IAXProto::OnOptionsInit(WPARAM wParam,LPARAM lParam)
+{
+ return 0;
+}
+
+
+int __cdecl IAXProto::OnPreShutdown(WPARAM wParam,LPARAM lParam)
+{
+ iaxc_stop_processing_thread();
+
+ iaxc_shutdown();
+
+ return 0;
+}
diff --git a/Protocols/IAX/IAXProto.h b/Protocols/IAX/IAXProto.h
index 32d0ad8..df399f9 100644
--- a/Protocols/IAX/IAXProto.h
+++ b/Protocols/IAX/IAXProto.h
@@ -95,7 +95,7 @@ public:
virtual int __cdecl UserIsTyping( HANDLE hContact, int type ) { return 0; }
- virtual int __cdecl OnEvent( PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam ) { return 1; }
+ virtual int __cdecl OnEvent( PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam );
int iaxc_callback(iaxc_event &e);
@@ -106,6 +106,10 @@ private:
HANDLE CreateProtoEvent(const char* szService);
int SendBroadcast(HANDLE hContact, int type, int result, HANDLE hProcess, LPARAM lParam);
+ int __cdecl OnModulesLoaded(WPARAM wParam, LPARAM lParam);
+ int __cdecl OnOptionsInit(WPARAM wParam,LPARAM lParam);
+ int __cdecl OnPreShutdown(WPARAM wParam,LPARAM lParam);
+
void ShowMessage(bool error, TCHAR *fmt, ...);
void Disconnect();
INT_PTR __cdecl CreateAccMgrUI(WPARAM wParam, LPARAM lParam);