aboutsummaryrefslogtreecommitdiffstats
path: root/channels/h323
diff options
context:
space:
mode:
authorjeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-19 16:17:08 +0000
committerjeremy <jeremy@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-19 16:17:08 +0000
commit51159cb37e99c778b8f0a6d0620d1697f73054e2 (patch)
tree8e7209d2a23db73b91be81c885530828bdcc6fec /channels/h323
parentbeeee1fba99e86bbd3973508f3f8a9df0bdf5f74 (diff)
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
Diffstat (limited to 'channels/h323')
-rwxr-xr-xchannels/h323/ast_h323.cpp28
-rwxr-xr-xchannels/h323/chan_h323.h11
2 files changed, 11 insertions, 28 deletions
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
-
-
-