Fix it so we can be unloaded/loaded at will

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2003 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Jeremy McNamara
2004-01-13 03:07:15 +00:00
parent 4f9f4c44d1
commit 9c1844a927
3 changed files with 37 additions and 25 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -215,9 +215,6 @@ class MyH323EndPoint : public H323EndPoint {
void SetEndpointTypeInfo( H225_EndpointType & info ) const;
void SetGateway(void);
H323TransportUDP *rasChannel;
};
class MyH323Connection : public H323Connection {