aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorjeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b>2004-01-13 03:07:15 +0000
committerjeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b>2004-01-13 03:07:15 +0000
commit8270caac975706bb0d9ed35365bf5cdec8d6eafc (patch)
tree653574342cc54642691b186821ad1fed9e1c9e9f /channels
parent50805a18f7706a53fd0ba83bca9d32f507500448 (diff)
Fix it so we can be unloaded/loaded at will
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2003 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_h323.c42
-rwxr-xr-xchannels/h323/ast_h323.cpp17
-rwxr-xr-xchannels/h323/ast_h323.h3
3 files changed, 37 insertions, 25 deletions
diff --git a/channels/chan_h323.c b/channels/chan_h323.c
index 1b5720a5c..d7d3dfb16 100755
--- a/channels/chan_h323.c
+++ b/channels/chan_h323.c
@@ -1270,7 +1270,7 @@ static int restart_monitor(void)
ast_log(LOG_WARNING, "Cannot kill myself\n");
return -1;
}
- if (monitor_thread) {
+ if (monitor_thread && (monitor_thread != -2)) {
/* Wake up the thread */
pthread_kill(monitor_thread, SIGURG);
} else {
@@ -1786,11 +1786,12 @@ int load_module()
/* Register our callback functions */
h323_callback_register(setup_incoming_call,
- setup_outgoing_call,
- create_connection,
- setup_rtp_connection,
- cleanup_connection,
- connection_made, send_digit);
+ setup_outgoing_call,
+ create_connection,
+ setup_rtp_connection,
+ cleanup_connection,
+ connection_made,
+ send_digit);
/* start the h.323 listener */
@@ -1833,6 +1834,19 @@ int unload_module()
ast_log(LOG_WARNING, "Unable to lock the interface list\n");
return -1;
}
+
+ if (!ast_mutex_lock(&monlock)) {
+ if (monitor_thread && (monitor_thread != -2)) {
+ pthread_cancel(monitor_thread);
+ pthread_kill(monitor_thread, SIGURG);
+ pthread_join(monitor_thread, NULL);
+ }
+ monitor_thread = (pthread_t) -2;
+ ast_mutex_unlock(&monlock);
+ } else {
+ ast_log(LOG_WARNING, "Unable to lock the monitor\n");
+ return -1;
+ }
if (!ast_mutex_lock(&iflock)) {
/* destroy all the interfaces and free their memory */
@@ -1856,13 +1870,15 @@ int unload_module()
ast_rtp_proto_unregister(&oh323_rtp);
/* unregister commands */
- ast_cli_unregister(&cli_debug);
- ast_cli_unregister(&cli_no_debug);
- ast_cli_unregister(&cli_trace);
- ast_cli_unregister(&cli_no_trace);
- ast_cli_unregister(&cli_show_codecs);
- ast_cli_unregister(&cli_gk_cycle);
-
+ ast_cli_unregister(&cli_debug);
+ ast_cli_unregister(&cli_no_debug);
+ ast_cli_unregister(&cli_trace);
+ ast_cli_unregister(&cli_no_trace);
+ ast_cli_unregister(&cli_show_codecs);
+// ast_cli_unregister(&cli_gk_cycle);
+ ast_cli_unregister(&cli_hangup_call);
+ ast_cli_unregister(&cli_show_tokens);
+
/* unregister channel type */
ast_channel_unregister(type);
diff --git a/channels/h323/ast_h323.cpp b/channels/h323/ast_h323.cpp
index df6c26408..78774665c 100755
--- a/channels/h323/ast_h323.cpp
+++ b/channels/h323/ast_h323.cpp
@@ -25,8 +25,10 @@
*
* Version Info: $Id$
*/
+#include <asterisk/logger.h>
#include "ast_h323.h"
+
/* PWlib Required Components */
#define MAJOR_VERSION 1
#define MINOR_VERSION 0
@@ -63,7 +65,7 @@ MyProcess::MyProcess(): PProcess("The NuFone Network's", "H.323 Channel Driver f
void MyProcess::Main()
{
- cout << " == Creating H.323 Endpoint" << endl;
+ ast_verbose(" == Creating H.323 Endpoint\n");
endPoint = new MyH323EndPoint();
PTrace::Initialise(0, NULL, PTrace::Timestamp | PTrace::Thread | PTrace::FileAndLine);
}
@@ -492,7 +494,7 @@ BOOL MyH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU)
{
if (h323debug) {
- cout << " -- Received SETUP message..." << endl;
+ ast_verbose(" -- Received SETUP message\n");
}
call_details_t cd;
@@ -948,6 +950,7 @@ int h323_set_gk(int gatekeeper_discover, char *gatekeeper, char *secret)
{
PString gkName = PString(gatekeeper);
PString pass = PString(secret);
+ H323TransportUDP *rasChannel;
if (!h323_end_point_exist()) {
cout << "ERROR: [h323_set_gk] No Endpoint, this is bad!" << endl;
@@ -972,17 +975,13 @@ int h323_set_gk(int gatekeeper_discover, char *gatekeeper, char *secret)
return 1;
}
} else {
- /* Gatekeeper operations */
- if (endPoint->rasChannel) {
- delete endPoint->rasChannel;
- }
- endPoint->rasChannel = new H323TransportUDP(*endPoint);
+ rasChannel = new H323TransportUDP(*endPoint);
- if (!endPoint->rasChannel) {
+ if (!rasChannel) {
cout << " *** No RAS Channel, this is bad" << endl;
return 1;
}
- if (endPoint->SetGatekeeper(gkName, endPoint->rasChannel)) {
+ if (endPoint->SetGatekeeper(gkName, rasChannel)) {
cout << " == Using " << (endPoint->GetGatekeeper())->GetName() << " as our Gatekeeper." << endl;
} else {
cout << " *** Error registering with gatekeeper \"" << gkName << "\". " << endl;
diff --git a/channels/h323/ast_h323.h b/channels/h323/ast_h323.h
index 71fd38924..e079d960e 100755
--- a/channels/h323/ast_h323.h
+++ b/channels/h323/ast_h323.h
@@ -215,9 +215,6 @@ class MyH323EndPoint : public H323EndPoint {
void SetEndpointTypeInfo( H225_EndpointType & info ) const;
void SetGateway(void);
-
- H323TransportUDP *rasChannel;
-
};
class MyH323Connection : public H323Connection {