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
This commit is contained in:
Jeremy McNamara
2004-07-20 21:04:16 +00:00
parent e49aae74d0
commit a59c1d2ac4
2 changed files with 49 additions and 25 deletions

View File

@@ -1054,12 +1054,12 @@ int setup_incoming_call(call_details_t cd)
} }
/* Populate the call details in the private structure */ /* Populate the call details in the private structure */
p->cd.call_token = cd.call_token; p->cd.call_token = strdup(cd.call_token);
p->cd.call_source_aliases = cd.call_source_aliases; p->cd.call_source_aliases = strdup(cd.call_source_aliases);
p->cd.call_dest_alias = cd.call_dest_alias; p->cd.call_dest_alias = strdup(cd.call_dest_alias);
p->cd.call_source_name = cd.call_source_name; p->cd.call_source_name = strdup(cd.call_source_name);
p->cd.call_source_e164 = cd.call_source_e164; p->cd.call_source_e164 = strdup(cd.call_source_e164);
p->cd.call_dest_e164 = cd.call_dest_e164; p->cd.call_dest_e164 = strdup(cd.call_dest_e164);
if (h323debug) { if (h323debug) {
ast_verbose(VERBOSE_PREFIX_3 "Setting up Call\n"); ast_verbose(VERBOSE_PREFIX_3 "Setting up Call\n");
@@ -1291,6 +1291,32 @@ void chan_ringing(unsigned call_reference)
return; 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 * Call-back function to cleanup communication
* Returns nothing, * Returns nothing,
@@ -1335,6 +1361,8 @@ void cleanup_connection(call_details_t cd)
ast_rtp_destroy(rtp); ast_rtp_destroy(rtp);
} }
cleanup_call_details(p->cd);
p->alreadygone = 1; p->alreadygone = 1;
/* Send hangup */ /* Send hangup */

View File

@@ -375,11 +375,11 @@ void MyH323EndPoint::OnConnectionCleared(H323Connection & connection, const PStr
remoteName = connection.GetRemotePartyName(); remoteName = connection.GetRemotePartyName();
cd.call_reference = connection.GetCallReference(); cd.call_reference = connection.GetCallReference();
cd.call_token = (const char *)clearedCallToken; cd.call_token = strdup((const char *)clearedCallToken);
cd.call_source_aliases = (const char *)connection.GetRemotePartyName(); cd.call_source_aliases = strdup((const char *)connection.GetRemotePartyName());
connection.GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, sourcePort); connection.GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, sourcePort);
cd.sourceIp = (const char *)Ip.AsString(); cd.sourceIp = strdup((const char *)Ip.AsString());
/* Convert complex strings */ /* Convert complex strings */
char *s; char *s;
@@ -539,7 +539,6 @@ BOOL MyH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU)
PString sourceName; PString sourceName;
PString sourceAliases; PString sourceAliases;
PString destAliases; PString destAliases;
PString sourceIp;
PIPSocket::Address Ip; PIPSocket::Address Ip;
WORD sourcePort; WORD sourcePort;
char *s, *s1; char *s, *s1;
@@ -567,18 +566,15 @@ BOOL MyH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU)
cd.call_reference = GetCallReference(); cd.call_reference = GetCallReference();
cd.call_token = (const char *)GetCallToken(); cd.call_token = strdup((const char *)GetCallToken());
cd.call_source_aliases = (const char *)sourceAliases; cd.call_source_aliases = strdup((const char *)sourceAliases);
cd.call_dest_alias = (const char *)destAliases; cd.call_dest_alias = strdup((const char *)destAliases);
cd.call_source_e164 = (const char *)sourceE164; cd.call_source_e164 = strdup((const char *)sourceE164);
cd.call_dest_e164 = (const char *)destE164; cd.call_dest_e164 = strdup((const char *)destE164);
cd.call_source_name = (const char *)sourceName; cd.call_source_name = strdup((const char *)sourceName);
GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, sourcePort); GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, sourcePort);
sourceIp = Ip.AsString(); cd.sourceIp = strdup((const char *)Ip.AsString());
cd.sourceIp = (const char *)sourceIp;
/* Notify Asterisk of the request */ /* Notify Asterisk of the request */
int res = on_incoming_call(cd); int res = on_incoming_call(cd);
@@ -622,11 +618,11 @@ BOOL MyH323Connection::OnSendSignalSetup(H323SignalPDU & setupPDU)
*s1 = '\0'; *s1 = '\0';
cd.call_reference = GetCallReference(); cd.call_reference = GetCallReference();
cd.call_token = (const char *)GetCallToken(); cd.call_token = strdup((const char *)GetCallToken());
cd.call_source_aliases = (const char *)sourceAliases; cd.call_source_aliases = strdup((const char *)sourceAliases);
cd.call_dest_alias = (const char *)destAliases; cd.call_dest_alias = strdup((const char *)destAliases);
cd.call_source_e164 = (const char *)sourceE164; cd.call_source_e164 = strdup((const char *)sourceE164);
cd.call_dest_e164 = (const char *)destE164; cd.call_dest_e164 = strdup((const char *)destE164);
int res = on_outgoing_call(cd); int res = on_outgoing_call(cd);