Bug 6873 - Finish moving from the non-threadsafe (and poor randomness) rand() to...
authorTilghman Lesher <tilghman@meg.abyt.es>
Wed, 5 Apr 2006 17:44:44 +0000 (17:44 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Wed, 5 Apr 2006 17:44:44 +0000 (17:44 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@17627 65c4cc65-6c06-0410-ace0-fbb531ad65f3

16 files changed:
app.c
apps/app_page.c
apps/app_queue.c
apps/app_voicemail.c
channels/chan_agent.c
channels/chan_iax2.c
channels/chan_local.c
channels/chan_mgcp.c
channels/chan_sip.c
channels/chan_zap.c
formats/format_ogg_vorbis.c
manager.c
pbx/pbx_dundi.c
res/res_musiconhold.c
rtp.c
udptl.c

diff --git a/app.c b/app.c
index 0bd8612..e6c7f46 100644 (file)
--- a/app.c
+++ b/app.c
@@ -1157,7 +1157,7 @@ enum AST_LOCK_RESULT ast_lock_path(const char *path)
                return AST_LOCK_FAILURE;
        }
 
-       snprintf(fs, strlen(path) + 19, "%s/.lock-%08x", path, rand());
+       snprintf(fs, strlen(path) + 19, "%s/.lock-%08lx", path, ast_random());
        fd = open(fs, O_WRONLY | O_CREAT | O_EXCL, 0600);
        if (fd < 0) {
                fprintf(stderr, "Unable to create lock file '%s': %s\n", path, strerror(errno));
index a9ad2c1..6051db4 100644 (file)
@@ -143,7 +143,7 @@ static int page_exec(struct ast_channel *chan, void *data)
        char *tech, *resource;
        char meetmeopts[80];
        struct ast_flags flags = { 0 };
-       unsigned int confid = rand();
+       unsigned int confid = ast_random();
        struct ast_app *app;
        char *tmp;
        int res=0;
index 9259bd7..f79bb8a 100644 (file)
@@ -1992,7 +1992,7 @@ static int calc_metric(struct ast_call_queue *q, struct member *mem, int pos, st
                tmp->metric += mem->penalty * 1000000;
                break;
        case QUEUE_STRATEGY_RANDOM:
-               tmp->metric = rand() % 1000;
+               tmp->metric = ast_random() % 1000;
                tmp->metric += mem->penalty * 1000000;
                break;
        case QUEUE_STRATEGY_FEWESTCALLS:
@@ -2241,7 +2241,7 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
                        else {
                                /* Last ditch effort -- no CDR, make up something */
                                char tmpid[256];
-                               snprintf(tmpid, sizeof(tmpid), "chan-%x", rand());
+                               snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
                                ast_monitor_start(which, qe->parent->monfmt, tmpid, 1 );
                        }
                        if (qe->parent->monjoin)
index 3690083..dc0f87e 100644 (file)
@@ -1753,11 +1753,11 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
                        fprintf(p, "Subject: New message %d in mailbox %s\n", msgnum + 1, mailbox);
                else
                        fprintf(p, "Subject: [PBX]: New message %d in mailbox %s\n", msgnum + 1, mailbox);
-               fprintf(p, "Message-ID: <Asterisk-%d-%d-%s-%d@%s>\n", msgnum, (unsigned int)rand(), mailbox, getpid(), host);
+               fprintf(p, "Message-ID: <Asterisk-%d-%d-%s-%d@%s>\n", msgnum, (unsigned int)ast_random(), mailbox, getpid(), host);
                fprintf(p, "MIME-Version: 1.0\n");
                if (attach_user_voicemail) {
                        /* Something unique. */
-                       snprintf(bound, sizeof(bound), "voicemail_%d%s%d%d", msgnum, mailbox, getpid(), (unsigned int)rand());
+                       snprintf(bound, sizeof(bound), "voicemail_%d%s%d%d", msgnum, mailbox, getpid(), (unsigned int)ast_random());
 
                        fprintf(p, "Content-Type: multipart/mixed; boundary=\"%s\"\n\n\n", bound);
 
index d13b091..1018363 100644 (file)
@@ -924,7 +924,7 @@ static struct ast_channel *agent_new(struct agent_pvt *p, int state)
                        tmp->rawreadformat = AST_FORMAT_SLINEAR;
                }
                if (p->pending)
-                       ast_string_field_build(tmp, name, "Agent/P%s-%d", p->agent, rand() & 0xffff);
+                       ast_string_field_build(tmp, name, "Agent/P%s-%d", p->agent, ast_random() & 0xffff);
                else
                        ast_string_field_build(tmp, name, "Agent/%s", p->agent);
                /* Safe, agentlock already held */
index 1ee12df..0885a2e 100644 (file)
@@ -1292,7 +1292,7 @@ static int try_firmware(char *s)
                last++;
        else
                last = s;
-       snprintf(s2, strlen(s) + 100, "/var/tmp/%s-%ld", last, (unsigned long)rand());
+       snprintf(s2, strlen(s) + 100, "/var/tmp/%s-%ld", last, (unsigned long)ast_random());
        res = stat(s, &stbuf);
        if (res < 0) {
                ast_log(LOG_WARNING, "Failed to stat '%s': %s\n", s, strerror(errno));
@@ -3249,7 +3249,7 @@ static int iax2_start_transfer(unsigned short callno0, unsigned short callno1)
        int res;
        struct iax_ie_data ied0;
        struct iax_ie_data ied1;
-       unsigned int transferid = rand();
+       unsigned int transferid = (unsigned int)ast_random();
        memset(&ied0, 0, sizeof(ied0));
        iax_ie_append_addr(&ied0, IAX_IE_APPARENT_ADDR, &iaxs[callno1]->addr);
        iax_ie_append_short(&ied0, IAX_IE_CALLNO, iaxs[callno1]->peercallno);
@@ -3790,9 +3790,9 @@ static unsigned int calc_rxstamp(struct chan_iax2_pvt *p, unsigned int offset)
        ms = ast_tvdiff_ms(ast_tvnow(), p->rxcore);
 #ifdef IAXTESTS
        if (test_jit) {
-               if (!test_jitpct || ((100.0 * rand() / (RAND_MAX + 1.0)) < test_jitpct)) {
-                       jit = (int)((float)test_jit * rand() / (RAND_MAX + 1.0));
-                       if ((int)(2.0 * rand() / (RAND_MAX + 1.0)))
+               if (!test_jitpct || ((100.0 * ast_random() / (RAND_MAX + 1.0)) < test_jitpct)) {
+                       jit = (int)((float)test_jit * ast_random() / (RAND_MAX + 1.0));
+                       if ((int)(2.0 * ast_random() / (RAND_MAX + 1.0)))
                                jit = -jit;
                        ms += jit;
                }
@@ -5144,7 +5144,7 @@ static int authenticate_request(struct chan_iax2_pvt *p)
        memset(&ied, 0, sizeof(ied));
        iax_ie_append_short(&ied, IAX_IE_AUTHMETHODS, p->authmethods);
        if (p->authmethods & (IAX_AUTH_MD5 | IAX_AUTH_RSA)) {
-               snprintf(p->challenge, sizeof(p->challenge), "%d", rand());
+               snprintf(p->challenge, sizeof(p->challenge), "%d", (int)ast_random());
                iax_ie_append_str(&ied, IAX_IE_CHALLENGE, p->challenge);
        }
        if (p->encmethods)
@@ -5967,7 +5967,7 @@ static int registry_authrequest(char *name, int callno)
                iax_ie_append_short(&ied, IAX_IE_AUTHMETHODS, p->authmethods);
                if (p->authmethods & (IAX_AUTH_RSA | IAX_AUTH_MD5)) {
                        /* Build the challenge */
-                       snprintf(iaxs[callno]->challenge, sizeof(iaxs[callno]->challenge), "%d", rand());
+                       snprintf(iaxs[callno]->challenge, sizeof(iaxs[callno]->challenge), "%d", (int)ast_random());
                        iax_ie_append_str(&ied, IAX_IE_CHALLENGE, iaxs[callno]->challenge);
                }
                iax_ie_append_str(&ied, IAX_IE_USERNAME, name);
@@ -6515,7 +6515,7 @@ static int socket_read(int *id, int fd, short events, void *cbdata)
                        ASTOBJ_CONTAINER_LINK_END(&idlelist, thread);
                        return 1;
                }
-               if (test_losspct && ((100.0*rand()/(RAND_MAX+1.0)) < test_losspct)) { /* simulate random loss condition */
+               if (test_losspct && ((100.0 * ast_random() / (RAND_MAX + 1.0)) < test_losspct)) { /* simulate random loss condition */
                        ASTOBJ_CONTAINER_LINK_END(&idlelist, thread); 
                        return 1;
                }
index c0b571e..63cf502 100644 (file)
@@ -478,7 +478,7 @@ static struct local_pvt *local_alloc(char *data, int format)
 static struct ast_channel *local_new(struct local_pvt *p, int state)
 {
        struct ast_channel *tmp, *tmp2;
-       int randnum = rand() & 0xffff;
+       int randnum = ast_random() & 0xffff;
 
        tmp = ast_channel_alloc(1);
        tmp2 = ast_channel_alloc(1);
index 397e240..d2bcfa8 100644 (file)
@@ -2616,7 +2616,7 @@ static void start_rtp(struct mgcp_subchannel *sub)
        ast_rtp_set_data(p->rtp, p);
 #endif         
        /* Make a call*ID */
-        snprintf(sub->callid, sizeof(sub->callid), "%08x%s", rand(), sub->txident);
+        snprintf(sub->callid, sizeof(sub->callid), "%08lx%s", ast_random(), sub->txident);
        /* Transmit the connection create */
        transmit_connect_with_sdp(sub, NULL);
        ast_mutex_unlock(&sub->lock);
@@ -3785,7 +3785,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                        strncpy(e->language, language, sizeof(e->language) - 1);
                                        strncpy(e->musicclass, musicclass, sizeof(e->musicclass) - 1);
                                        strncpy(e->mailbox, mailbox, sizeof(e->mailbox) - 1);
-                                       snprintf(e->rqnt_ident, sizeof(e->rqnt_ident), "%08x", rand());
+                                       snprintf(e->rqnt_ident, sizeof(e->rqnt_ident), "%08lx", ast_random());
                                        e->msgstate = -1;
                                        e->amaflags = amaflags;
                                        e->capability = capability;
@@ -3811,7 +3811,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                        /* ASSUME we're onhook */
                                        e->hookstate = MGCP_ONHOOK;
                                        if (!ep_reload) {
-                                               /*snprintf(txident, sizeof(txident), "%08x", rand());*/
+                                               /*snprintf(txident, sizeof(txident), "%08lx", ast_random());*/
                                                for (i = 0; i < MAX_SUBS; i++) {
                                                        sub = malloc(sizeof(struct mgcp_subchannel));
                                                        if (sub) {
@@ -3821,7 +3821,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                                                ast_mutex_init(&sub->cx_queue_lock);
                                                                sub->parent = e;
                                                                sub->id = i;
-                                                               snprintf(sub->txident, sizeof(sub->txident), "%08x", rand());
+                                                               snprintf(sub->txident, sizeof(sub->txident), "%08lx", ast_random());
                                                                /*stnrcpy(sub->txident, txident, sizeof(sub->txident) - 1);*/
                                                                sub->cxmode = MGCP_CX_INACTIVE;
                                                                sub->nat = nat;
@@ -3916,7 +3916,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                                e->onhooktime = time(NULL);
                                                /* ASSUME we're onhook */
                                                e->hookstate = MGCP_ONHOOK;
-                                               snprintf(e->rqnt_ident, sizeof(e->rqnt_ident), "%08x", rand());
+                                               snprintf(e->rqnt_ident, sizeof(e->rqnt_ident), "%08lx", ast_random());
                                        }
 
                                        for (i = 0, sub = NULL; i < MAX_SUBS; i++) {
@@ -3938,7 +3938,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                                                strncpy(sub->magic, MGCP_SUBCHANNEL_MAGIC, sizeof(sub->magic) - 1);
                                                                sub->parent = e;
                                                                sub->id = i;
-                                                               snprintf(sub->txident, sizeof(sub->txident), "%08x", rand());
+                                                               snprintf(sub->txident, sizeof(sub->txident), "%08lx", ast_random());
                                                                sub->cxmode = MGCP_CX_INACTIVE;
                                                                sub->next = e->sub;
                                                                e->sub = sub;
index 0227773..e5b0054 100644 (file)
@@ -454,8 +454,6 @@ static struct ast_flags global_flags[2] = {{0}};    /*!< global SIP_ flags */
 
 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
 
-AST_MUTEX_DEFINE_STATIC(rand_lock);                    /*!< Lock for thread-safe random generator */
-
 /*! \brief Protect the SIP dialog list (of sip_pvt's) */
 AST_MUTEX_DEFINE_STATIC(iflock);
 
@@ -704,7 +702,7 @@ static struct sip_pvt {
        int callingpres;                        /*!< Calling presentation */
        int authtries;                          /*!< Times we've tried to authenticate */
        int expiry;                             /*!< How long we take to expire */
-       int branch;                             /*!< One random number */
+       long branch;                            /*!< One random number */
        char tag[11];                           /*!< Another random number */
        int sessionid;                          /*!< SDP Session ID */
        int sessionversion;                     /*!< SDP Session Version */
@@ -1039,24 +1037,6 @@ static struct ast_rtp_protocol sip_rtp = {
 };
 
 
-/*!
-  \brief Thread-safe random number generator
-  \return a random number
-
-  This function uses a mutex lock to guarantee that no
-  two threads will receive the same random number.
- */
-static force_inline int thread_safe_rand(void)
-{
-       int val;
-
-       ast_mutex_lock(&rand_lock);
-       val = rand();
-       ast_mutex_unlock(&rand_lock);
-       
-       return val;
-}
-
 /*! \brief Find SIP method from header
  * Strictly speaking, SIP methods are case SENSITIVE, but we don't check 
  * following Jon Postel's rule: Be gentle in what you accept, strict with what you send */
@@ -2945,7 +2925,7 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, const char *tit
        fmt = ast_best_codec(tmp->nativeformats);
 
        if (title)
-               ast_string_field_build(tmp, name, "SIP/%s-%04x", title, thread_safe_rand() & 0xffff);
+               ast_string_field_build(tmp, name, "SIP/%s-%04lx", title, ast_random() & 0xffff);
        else if (strchr(i->fromdomain,':'))
                ast_string_field_build(tmp, name, "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
        else
@@ -3197,12 +3177,12 @@ static struct ast_frame *sip_read(struct ast_channel *ast)
 /*! \brief Generate 32 byte random string for callid's etc */
 static char *generate_random_string(char *buf, size_t size)
 {
-       int val[4];
+       long val[4];
        int x;
 
        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]);
+               val[x] = ast_random();
+       snprintf(buf, size, "%08lx%08lx%08lx%08lx", val[0], val[1], val[2], val[3]);
 
        return buf;
 }
@@ -3233,7 +3213,7 @@ static void build_callid_registry(struct sip_registry *reg, struct in_addr ourip
 /*! \brief Make our SIP dialog tag */
 static void make_our_tag(char *tagbuf, size_t len)
 {
-       snprintf(tagbuf, len, "as%08x", thread_safe_rand());
+       snprintf(tagbuf, len, "as%08lx", ast_random());
 }
 
 /*! \brief Allocate SIP_PVT structure and set defaults */
@@ -3276,7 +3256,7 @@ static struct sip_pvt *sip_alloc(ast_string_field callid, struct sockaddr_in *si
        ast_copy_flags(&p->flags[0], &global_flags[0], SIP_FLAGS_TO_COPY);
        ast_copy_flags(&p->flags[1], &global_flags[1], SIP_PAGE2_FLAGS_TO_COPY);
 
-       p->branch = thread_safe_rand(); 
+       p->branch = ast_random();       
        make_our_tag(p->tag, sizeof(p->tag));
        /* Start with 101 instead of 1 */
        p->ocseq = 101;
@@ -4268,7 +4248,7 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
        }
        
        if (newbranch) {
-               p->branch ^= thread_safe_rand();
+               p->branch ^= ast_random();
                build_via(p);
        }
 
@@ -5110,7 +5090,7 @@ static int transmit_invite(struct sip_pvt *p, int sipmethod, int sdp, int init)
        req.method = sipmethod;
        if (init) {
                /* Bump branch even on initial requests */
-               p->branch ^= thread_safe_rand();
+               p->branch ^= ast_random();
                build_via(p);
                if (init > 1)
                        initreqprep(&req, p, sipmethod);
@@ -5682,7 +5662,7 @@ static int transmit_register(struct sip_registry *r, int sipmethod, char *auth,
                snprintf(addr, sizeof(addr), "sip:%s", r->hostname);
        ast_string_field_set(p, uri, addr);
 
-       p->branch ^= thread_safe_rand();
+       p->branch ^= ast_random();
 
        memset(&req, 0, sizeof(req));
        init_req(&req, sipmethod, addr);
@@ -5954,7 +5934,7 @@ static void reg_source_db(struct sip_peer *peer)
                /* SIP isn't up yet, so schedule a poke only, pretty soon */
                if (peer->pokeexpire > -1)
                        ast_sched_del(sched, peer->pokeexpire);
-               peer->pokeexpire = ast_sched_add(sched, thread_safe_rand() % 5000 + 1, sip_poke_peer_s, peer);
+               peer->pokeexpire = ast_sched_add(sched, ast_random() % 5000 + 1, sip_poke_peer_s, peer);
        } else
                sip_poke_peer(peer);
        if (peer->expire > -1)
@@ -6412,7 +6392,7 @@ static int check_auth(struct sip_pvt *p, struct sip_request *req, const char *us
                return 1;       /* Auth sent */
        } else if (ast_strlen_zero(p->randdata) || ast_strlen_zero(authtoken)) {
                /* We have no auth, so issue challenge and request authentication */
-               ast_string_field_build(p, randdata, "%08x", thread_safe_rand());        /* Create nonce for challenge */
+               ast_string_field_build(p, randdata, "%08lx", ast_random());     /* Create nonce for challenge */
                transmit_response_with_auth(p, response, req, p->randdata, reliable, respheader, 0);
                /* Schedule auto destroy in 32 seconds */
                sip_scheddestroy(p, 32000);
@@ -6502,7 +6482,7 @@ static int check_auth(struct sip_pvt *p, struct sip_request *req, const char *us
                good_response = keys[K_RESP].s &&
                                !strncasecmp(keys[K_RESP].s, resp_hash, strlen(resp_hash));
                if (wrongnonce) {
-                       ast_string_field_build(p, randdata, "%08x", thread_safe_rand());
+                       ast_string_field_build(p, randdata, "%08lx", ast_random());
                        if (good_response) {
                                if (sipdebug)
                                        ast_log(LOG_NOTICE, "stale nonce received from '%s'\n", get_header(req, "To"));
@@ -9311,7 +9291,7 @@ static int build_reply_digest(struct sip_pvt *p, int method, char* digest, int d
        else
                snprintf(uri, sizeof(uri), "sip:%s@%s",p->username, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr));
 
-       snprintf(cnonce, sizeof(cnonce), "%08x", thread_safe_rand());
+       snprintf(cnonce, sizeof(cnonce), "%08lx", ast_random());
 
        /* Check if we have separate auth credentials */
        if ((auth = find_realm_authentication(authl, p->realm))) {
index f817274..8e56c49 100644 (file)
@@ -5117,7 +5117,7 @@ static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int
                        else
 #endif
                        if (i->channel == CHAN_PSEUDO)
-                               ast_string_field_build(tmp, name, "Zap/pseudo-%d", rand());
+                               ast_string_field_build(tmp, name, "Zap/pseudo-%d", ast_random());
                        else    
                                ast_string_field_build(tmp, name, "Zap/%d-%d", i->channel, y);
                        for (x=0;x<3;x++) {
index 1333176..a8274cb 100644 (file)
@@ -219,7 +219,7 @@ static int ogg_vorbis_rewrite(struct ast_filestream *s,
        vorbis_analysis_init(&tmp->vd, &tmp->vi);
        vorbis_block_init(&tmp->vd, &tmp->vb);
 
-       ogg_stream_init(&tmp->os, rand());
+       ogg_stream_init(&tmp->os, ast_random());
 
        vorbis_analysis_headerout(&tmp->vd, &tmp->vc, &header, &header_comm,
                                  &header_code);
index 1fe39eb..56e41fd 100644 (file)
--- a/manager.c
+++ b/manager.c
@@ -1674,7 +1674,7 @@ static int process_message(struct mansession *s, struct message *m)
                        authtype = astman_get_header(m, "AuthType");
                        if (!strcasecmp(authtype, "MD5")) {
                                if (ast_strlen_zero(s->challenge))
-                                       snprintf(s->challenge, sizeof(s->challenge), "%d", rand());
+                                       snprintf(s->challenge, sizeof(s->challenge), "%ld", ast_random());
                                ast_mutex_lock(&s->__lock);
                                astman_append(s, "Response: Success\r\n"
                                                "%s"
index e817532..4397d43 100644 (file)
@@ -440,7 +440,7 @@ static void reset_global_eid(void)
 static int get_trans_id(void)
 {
        struct dundi_transaction *t;
-       int stid = (rand() % 32766) + 1;
+       int stid = (ast_random() % 32766) + 1;
        int tid = stid;
        do {
                t = alltrans;
@@ -493,7 +493,7 @@ static void build_iv(unsigned char *iv)
        int x;
        fluffy = (unsigned int *)(iv);
        for (x=0;x<4;x++)
-               fluffy[x] = rand();
+               fluffy[x] = ast_random();
 }
 
 struct dundi_query_state {
index 4c0f932..314c076 100644 (file)
@@ -208,7 +208,7 @@ static int ast_moh_files_next(struct ast_channel *chan)
                        }
 
                        if (ast_test_flag(state->class, MOH_RANDOMIZE))
-                               state->pos = rand();
+                               state->pos = ast_random();
 
                        /* check to see if this file's format can be opened */
                        if (ast_fileexists(state->class->filearray[state->pos], NULL, NULL) != -1)
diff --git a/rtp.c b/rtp.c
index b1a36ef..475ba48 100644 (file)
--- a/rtp.c
+++ b/rtp.c
@@ -1008,8 +1008,8 @@ struct ast_rtp *ast_rtp_new_with_bindaddr(struct sched_context *sched, struct io
        rtp->them.sin_family = AF_INET;
        rtp->us.sin_family = AF_INET;
        rtp->s = rtp_socket();
-       rtp->ssrc = rand();
-       rtp->seqno = rand() & 0xffff;
+       rtp->ssrc = ast_random();
+       rtp->seqno = ast_random() & 0xffff;
        if (rtp->s < 0) {
                free(rtp);
                ast_log(LOG_ERROR, "Unable to allocate socket: %s\n", strerror(errno));
@@ -1021,7 +1021,7 @@ struct ast_rtp *ast_rtp_new_with_bindaddr(struct sched_context *sched, struct io
        }
        
        /* Select a random port number in the range of possible RTP */
-       x = (rand() % (rtpend-rtpstart)) + rtpstart;
+       x = (ast_random() % (rtpend-rtpstart)) + rtpstart;
        x = x & ~1;
        /* Save it for future references. */
        startplace = x;
diff --git a/udptl.c b/udptl.c
index 0605892..25587d9 100644 (file)
--- a/udptl.c
+++ b/udptl.c
@@ -794,7 +794,7 @@ struct ast_udptl *ast_udptl_new_with_bindaddr(struct sched_context *sched, struc
                udptl->tx[i].buf_len = -1;
        }
 
-       udptl->seqno = rand() & 0xffff;
+       udptl->seqno = ast_random() & 0xffff;
        udptl->them.sin_family = AF_INET;
        udptl->us.sin_family = AF_INET;
 
@@ -810,7 +810,7 @@ struct ast_udptl *ast_udptl_new_with_bindaddr(struct sched_context *sched, struc
                setsockopt(udptl->fd, SOL_SOCKET, SO_NO_CHECK, &nochecksums, sizeof(nochecksums));
 #endif
        /* Find us a place */
-       x = (rand()%(udptlend - udptlstart)) + udptlstart;
+       x = (ast_random() % (udptlend - udptlstart)) + udptlstart;
        startplace = x;
        for (;;) {
                udptl->us.sin_port = htons(x);