summaryrefslogtreecommitdiff
path: root/channels/chan_h323.c
diff options
context:
space:
mode:
authorJeremy McNamara <jj@nufone.net>2004-07-20 21:04:16 +0000
committerJeremy McNamara <jj@nufone.net>2004-07-20 21:04:16 +0000
commita59c1d2ac41219ce0e4b4c7042479d72843c6fe9 (patch)
tree6e24c60c36f9aba3cdd61e00e7cdc9ebc646e2c3 /channels/chan_h323.c
parente49aae74d0daaf9a7672153362837c8bd9c68e83 (diff)
first attempt to properly copy and then free call detail strings.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3485 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_h323.c')
-rwxr-xr-xchannels/chan_h323.c40
1 files changed, 34 insertions, 6 deletions
diff --git a/channels/chan_h323.c b/channels/chan_h323.c
index db2ec980f..9c5724e34 100755
--- a/channels/chan_h323.c
+++ b/channels/chan_h323.c
@@ -1054,12 +1054,12 @@ int setup_incoming_call(call_details_t cd)
}
/* Populate the call details in the private structure */
- p->cd.call_token = cd.call_token;
- p->cd.call_source_aliases = cd.call_source_aliases;
- p->cd.call_dest_alias = cd.call_dest_alias;
- p->cd.call_source_name = cd.call_source_name;
- p->cd.call_source_e164 = cd.call_source_e164;
- p->cd.call_dest_e164 = cd.call_dest_e164;
+ p->cd.call_token = strdup(cd.call_token);
+ p->cd.call_source_aliases = strdup(cd.call_source_aliases);
+ p->cd.call_dest_alias = strdup(cd.call_dest_alias);
+ p->cd.call_source_name = strdup(cd.call_source_name);
+ p->cd.call_source_e164 = strdup(cd.call_source_e164);
+ p->cd.call_dest_e164 = strdup(cd.call_dest_e164);
if (h323debug) {
ast_verbose(VERBOSE_PREFIX_3 "Setting up Call\n");
@@ -1291,6 +1291,32 @@ void chan_ringing(unsigned call_reference)
return;
}
+
+void cleanup_call_details(call_details_t cd)
+{
+ if (cd.call_token) {
+ free((const char*)cd.call_token);
+ }
+ if (cd.call_source_aliases) {
+ free((const char*)cd.call_source_aliases);
+ }
+ if (cd.call_dest_alias) {
+ free((const char*)cd.call_dest_alias);
+ }
+ if (cd.call_source_name) {
+ free((const char*)cd.call_source_name);
+ }
+ if (cd.call_source_e164) {
+ free((const char*)cd.call_source_e164);
+ }
+ if (cd.call_dest_e164) {
+ free((const char*)cd.call_dest_e164);
+ }
+ if (cd.sourceIp) {
+ free((const char*)cd.sourceIp);
+ }
+}
+
/**
* Call-back function to cleanup communication
* Returns nothing,
@@ -1335,6 +1361,8 @@ void cleanup_connection(call_details_t cd)
ast_rtp_destroy(rtp);
}
+ cleanup_call_details(p->cd);
+
p->alreadygone = 1;
/* Send hangup */