From 51159cb37e99c778b8f0a6d0620d1697f73054e2 Mon Sep 17 00:00:00 2001 From: jeremy Date: Thu, 19 May 2005 16:17:08 +0000 Subject: Fix memory leak, avoid uncessary abuse of memory and formatting tweaks. Bug #4282 git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5739 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/h323/ast_h323.cpp | 28 +++++++--------------------- channels/h323/chan_h323.h | 11 ++++------- 2 files changed, 11 insertions(+), 28 deletions(-) (limited to 'channels/h323') diff --git a/channels/h323/ast_h323.cpp b/channels/h323/ast_h323.cpp index c4eeb0587..2e59c8f43 100755 --- a/channels/h323/ast_h323.cpp +++ b/channels/h323/ast_h323.cpp @@ -434,23 +434,8 @@ void MyH323EndPoint::OnConnectionEstablished(H323Connection & connection, const */ void MyH323EndPoint::OnConnectionCleared(H323Connection & connection, const PString & clearedCallToken) { - PString remoteName; - call_details_t cd; - PIPSocket::Address Ip; - WORD sourcePort; + PString remoteName = connection.GetRemotePartyName(); - remoteName = connection.GetRemotePartyName(); - cd.call_reference = connection.GetCallReference(); - cd.call_token = strdup((const char *)clearedCallToken); - cd.call_source_aliases = strdup((const char *)connection.GetRemotePartyName()); - connection.GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, sourcePort); - cd.sourceIp = strdup((const char *)Ip.AsString()); - - /* Convert complex strings */ - char *s; - if ((s = strchr(cd.call_source_aliases, ' ')) != NULL) { - *s = '\0'; - } switch (connection.GetCallEndReason()) { case H323Connection::EndedByCallForwarded: if (h323debug) { @@ -549,7 +534,7 @@ void MyH323EndPoint::OnConnectionCleared(H323Connection & connection, const PStr } } /* Invoke the PBX application registered callback */ - on_connection_cleared(cd); + on_connection_cleared(connection.GetCallReference(), clearedCallToken); return; } @@ -743,6 +728,7 @@ BOOL MyH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU) *s1 = '\0'; } + memset(&cd, 0, sizeof(cd)); cd.call_reference = GetCallReference(); cd.call_token = strdup((const char *)GetCallToken()); cd.call_source_aliases = strdup((const char *)sourceAliases); @@ -755,7 +741,7 @@ BOOL MyH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU) cd.sourceIp = strdup((const char *)Ip.AsString()); /* Notify Asterisk of the request */ - call_options_t *res = on_incoming_call(cd); + call_options_t *res = on_incoming_call(&cd); if (!res) { if (h323debug) { @@ -815,16 +801,16 @@ BOOL MyH323Connection::OnSendSignalSetup(H323SignalPDU & setupPDU) if ((s1 = strchr(destAliases, '\t')) != NULL) { *s1 = '\0'; } + + memset(&cd, 0, sizeof(cd)); cd.call_reference = GetCallReference(); - Lock(); cd.call_token = strdup((const char *)GetCallToken()); - Unlock(); cd.call_source_aliases = strdup((const char *)sourceAliases); cd.call_dest_alias = strdup((const char *)destAliases); cd.call_source_e164 = strdup((const char *)sourceE164); cd.call_dest_e164 = strdup((const char *)destE164); - int res = on_outgoing_call(cd); + int res = on_outgoing_call(&cd); if (!res) { if (h323debug) { cout << "\t-- Call Failed" << endl; diff --git a/channels/h323/chan_h323.h b/channels/h323/chan_h323.h index 520dda3f4..aeb88b876 100755 --- a/channels/h323/chan_h323.h +++ b/channels/h323/chan_h323.h @@ -36,7 +36,7 @@ typedef struct call_options { int noFastStart; int noH245Tunneling; int noSilenceSuppression; - unsigned int port; +/* unsigned int port; */ int progress_setup; int progress_alert; int progress_audio; @@ -132,12 +132,12 @@ extern progress_cb on_progress; /* This is a callback prototype function, called upon an incoming call happens. */ -typedef call_options_t *(*setup_incoming_cb)(call_details_t); +typedef call_options_t *(*setup_incoming_cb)(call_details_t *); extern setup_incoming_cb on_incoming_call; /* This is a callback prototype function, called upon an outbound call. */ -typedef int (*setup_outbound_cb)(call_details_t); +typedef int (*setup_outbound_cb)(call_details_t *); extern setup_outbound_cb on_outgoing_call; /* This is a callback prototype function, called when @@ -152,7 +152,7 @@ extern con_established_cb on_connection_established; /* This is a callback prototype function, called when OnConnectionCleared callback is invoked */ -typedef void (*clear_con_cb)(call_details_t); +typedef void (*clear_con_cb)(unsigned, const char *); extern clear_con_cb on_connection_cleared; /* This is a callback prototype function, called when @@ -231,6 +231,3 @@ extern "C" { #ifdef __cplusplus } #endif - - - -- cgit v1.2.3