diff options
author | Olle Johansson <oej@edvina.net> | 2006-01-28 15:02:29 +0000 |
---|---|---|
committer | Olle Johansson <oej@edvina.net> | 2006-01-28 15:02:29 +0000 |
commit | 7ac422562e1d706b97767b494ddb508c4967c483 (patch) | |
tree | 55b22245e2e915fa37f6c24e525d8295110004f7 /channels | |
parent | 10474b59c1a3d94e10a064f0a1e7f09862caefcd (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
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 45 |
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 */ |