summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlle Johansson <oej@edvina.net>2006-01-28 15:02:29 +0000
committerOlle Johansson <oej@edvina.net>2006-01-28 15:02:29 +0000
commit7ac422562e1d706b97767b494ddb508c4967c483 (patch)
tree55b22245e2e915fa37f6c24e525d8295110004f7
parent10474b59c1a3d94e10a064f0a1e7f09862caefcd (diff)
Simplify code for building Call ID's, create generic random string function
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@8823 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--channels/chan_sip.c45
1 files changed, 20 insertions, 25 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 2f03ade0e..3fa488840 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -3080,46 +3080,41 @@ static struct ast_frame *sip_read(struct ast_channel *ast)
return fr;
}
-/*! \brief Build SIP Call-ID value for a non-REGISTER transaction */
-static void build_callid_pvt(struct sip_pvt *pvt)
+
+/*! \brief Generate 32 byte random string for callid's etc */
+static char *generate_random_string(char *buf, size_t size)
{
int val[4];
int x;
- char iabuf[INET_ADDRSTRLEN];
for (x=0; x<4; x++)
val[x] = thread_safe_rand();
+ snprintf(buf, size, "%08x%08x%08x%08x", val[0], val[1], val[2], val[3]);
+
+ return buf;
+}
+
+/*! \brief Build SIP Call-ID value for a non-REGISTER transaction */
+static void build_callid_pvt(struct sip_pvt *pvt)
+{
+ char iabuf[INET_ADDRSTRLEN];
+ char buf[33];
+
+ const char *host = ast_strlen_zero(pvt->fromdomain) ? ast_inet_ntoa(iabuf, sizeof(iabuf), pvt->ourip) : pvt->fromdomain;
+
+ ast_string_field_build(pvt, callid, "%s@%s", generate_random_string(buf, sizeof(buf)), host);
- if (ast_strlen_zero(pvt->fromdomain))
- /* It's not important that we really use our right IP here... */
- ast_string_field_build(pvt, callid, "%08x%08x%08x%08x@%s",
- val[0], val[1], val[2], val[3],
- ast_inet_ntoa(iabuf, sizeof(iabuf), pvt->ourip));
- else
- ast_string_field_build(pvt, callid, "%08x%08x%08x%08x@%s",
- val[0], val[1], val[2], val[3],
- pvt->fromdomain);
}
/*! \brief Build SIP Call-ID value for a REGISTER transaction */
static void build_callid_registry(struct sip_registry *reg, struct in_addr ourip, const char *fromdomain)
{
- int val[4];
- int x;
char iabuf[INET_ADDRSTRLEN];
+ char buf[33];
- for (x=0; x<4; x++)
- val[x] = thread_safe_rand();
+ const char *host = ast_strlen_zero(fromdomain) ? ast_inet_ntoa(iabuf, sizeof(iabuf), ourip) : fromdomain;
- if (ast_strlen_zero(fromdomain))
- /* It's not important that we really use our right IP here... */
- ast_string_field_build(reg, callid, "%08x%08x%08x%08x@%s",
- val[0], val[1], val[2], val[3],
- ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
- else
- ast_string_field_build(reg, callid, "%08x%08x%08x%08x@%s",
- val[0], val[1], val[2], val[3],
- fromdomain);
+ ast_string_field_build(reg, callid, "%s@%s", generate_random_string(buf, sizeof(buf)), host);
}
/*! \brief Make our SIP dialog tag */