Fix it so we can be unloaded/loaded at will
authorJeremy McNamara <jj@nufone.net>
Tue, 13 Jan 2004 03:07:15 +0000 (03:07 +0000)
committerJeremy McNamara <jj@nufone.net>
Tue, 13 Jan 2004 03:07:15 +0000 (03:07 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2003 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_h323.c
channels/h323/ast_h323.cpp
channels/h323/ast_h323.h

index 1b5720a..d7d3dfb 100755 (executable)
@@ -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);
 
index df6c264..7877466 100755 (executable)
  *
  * 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;
index 71fd389..e079d96 100755 (executable)
@@ -215,9 +215,6 @@ class MyH323EndPoint : public H323EndPoint {
        
        void SetEndpointTypeInfo( H225_EndpointType & info ) const;
        void SetGateway(void);
-
-       H323TransportUDP *rasChannel;
-
 };
 
 class MyH323Connection : public H323Connection {