[asterisk-commits] oej: branch oej/pine-instance-uuid-1.8 r386615 - /team/oej/pine-instance-uuid...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Apr 26 10:16:23 CDT 2013
Author: oej
Date: Fri Apr 26 10:16:20 2013
New Revision: 386615
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=386615
Log:
Adding a patch file
Added:
team/oej/pine-instance-uuid-1.8/patches/
team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff (with props)
Added: team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff
URL: http://svnview.digium.com/svn/asterisk/team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff?view=auto&rev=386615
==============================================================================
--- team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff (added)
+++ team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff Fri Apr 26 10:16:20 2013
@@ -1,0 +1,620 @@
+Index: channels/chan_sip.c
+===================================================================
+--- channels/chan_sip.c (.../branches/1.8) (revision 386614)
++++ channels/chan_sip.c (.../team/oej/pine-instance-uuid-1.8) (revision 386614)
+@@ -273,6 +273,7 @@
+ #include "sip/include/sdp_crypto.h"
+ #include "asterisk/ccss.h"
+ #include "asterisk/xml.h"
++#include "asterisk/uuid.h"
+ #include "sip/include/dialog.h"
+ #include "sip/include/dialplan_functions.h"
+
+@@ -1538,7 +1539,7 @@
+ static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, const struct sip_request *orig, const char *field);
+ static void set_destination(struct sip_pvt *p, char *uri);
+ static void append_date(struct sip_request *req);
+-static void build_contact(struct sip_pvt *p);
++static void build_contact(struct sip_pvt *p, int useinstance);
+
+ /*------Request handling functions */
+ static int handle_incoming(struct sip_pvt *p, struct sip_request *req, struct ast_sockaddr *addr, int *recount, int *nounlock);
+@@ -12424,18 +12425,24 @@
+ }
+
+ /*! \brief Build contact header - the contact header we send out */
+-static void build_contact(struct sip_pvt *p)
++static void build_contact(struct sip_pvt *p, int useinstance)
+ {
+ char tmp[SIPBUFSIZE];
++ char instance[SIPBUFSIZE/2];
+ char *user = ast_uri_encode(p->exten, tmp, sizeof(tmp), 0);
+
++ instance[0] = '\0';
++ if (useinstance && ast_test_flag(&p->flags[2], SIP_PAGE3_USE_INSTANCE_ID) && strlen(sip_cfg.instance_id) > 0) {
++ sprintf(instance, ";+sip.instance=\"<urn:uuid:%s>\"", sip_cfg.instance_id);
++ }
++
+ if (p->socket.type == SIP_TRANSPORT_UDP) {
+- ast_string_field_build(p, our_contact, "<sip:%s%s%s>", user,
+- ast_strlen_zero(user) ? "" : "@", ast_sockaddr_stringify_remote(&p->ourip));
++ ast_string_field_build(p, our_contact, "<sip:%s%s%s%s>", user,
++ ast_strlen_zero(user) ? "" : "@", ast_sockaddr_stringify_remote(&p->ourip), instance);
+ } else {
+- ast_string_field_build(p, our_contact, "<sip:%s%s%s;transport=%s>", user,
++ ast_string_field_build(p, our_contact, "<sip:%s%s%s;transport=%s%s>", user,
+ ast_strlen_zero(user) ? "" : "@", ast_sockaddr_stringify_remote(&p->ourip),
+- get_transport(p->socket.type));
++ get_transport(p->socket.type), instance);
+ }
+ }
+
+@@ -12599,7 +12606,7 @@
+ add_header(req, "From", from);
+ add_header(req, "To", to);
+ ast_string_field_set(p, exten, l);
+- build_contact(p);
++ build_contact(p, FALSE);
+ add_header(req, "Contact", p->our_contact);
+ add_header(req, "Call-ID", p->callid);
+ add_header(req, "CSeq", tmp_n);
+@@ -13012,7 +13019,7 @@
+ set_socket_transport(&mwi->call->socket, mwi->transport);
+ mwi->call->socket.port = htons(mwi->portno);
+ ast_sip_ouraddrfor(&mwi->call->sa, &mwi->call->ourip, mwi->call);
+- build_contact(mwi->call);
++ build_contact(mwi->call, TRUE);
+ build_via(mwi->call);
+
+ /* Change the dialog callid. */
+@@ -13892,7 +13899,7 @@
+ internal network so we can register through nat
+ */
+ ast_sip_ouraddrfor(&p->sa, &p->ourip, p);
+- build_contact(p);
++ build_contact(p, TRUE);
+ }
+
+ /* set up a timeout */
+@@ -15378,7 +15385,7 @@
+ }
+
+ ast_string_field_set(p, exten, name);
+- build_contact(p);
++ build_contact(p, FALSE);
+ if (req->ignore) {
+ /* Expires is a special case, where we only want to load the peer if this isn't a deregistration attempt */
+ const char *expires = get_header(req, "Expires");
+@@ -16783,7 +16790,7 @@
+ *t = '\0';
+
+ if (ast_strlen_zero(p->our_contact))
+- build_contact(p);
++ build_contact(p, FALSE);
+ }
+
+ of = get_in_brackets(of);
+@@ -17622,6 +17629,21 @@
+ return map_x_s(allowoverlapstr, mode, "<error>");
+ }
+
++/*! \brief Get SIP.instance UUID from registry. If it doesn't exist,
++ create one.
++ */
++static void initiate_sip_instance(void)
++{
++ if (!ast_db_get("SIP", "instanceid", &sip_cfg.instance_id, sizeof(sip_cfg.instance_id))) {
++ /* We loaded instance ID from astdb. All good */
++ return;
++ }
++ /* Create UUID, store it */
++ ast_uuid_generate_str(&sip_cfg.instance_id, sizeof(sip_cfg.instance_id));
++ ast_db_put("SIP", "instanceid", &sip_cfg.instance_id);
++ return;
++}
++
+ /*! \brief Destroy disused contexts between reloads
+ Only used in reload_config so the code for regcontext doesn't get ugly
+ */
+@@ -22651,7 +22673,7 @@
+
+ /* must go through authentication before getting here */
+ gotdest = get_destination(p, req, NULL);
+- build_contact(p);
++ build_contact(p, FALSE);
+
+ if (ast_strlen_zero(p->context))
+ ast_string_field_set(p, context, sip_cfg.default_context);
+@@ -23369,7 +23391,7 @@
+ }
+ gotdest = get_destination(p, NULL, &cc_recall_core_id); /* Get destination right away */
+ extract_uri(p, req); /* Get the Contact URI */
+- build_contact(p); /* Build our contact header */
++ build_contact(p, FALSE); /* Build our contact header */
+
+ if (p->rtp) {
+ ast_rtp_instance_set_prop(p->rtp, AST_RTP_PROPERTY_DTMF, ast_test_flag(&p->flags[0], SIP_DTMF) == SIP_DTMF_RFC2833);
+@@ -25386,7 +25408,7 @@
+ /* Get full contact header - this needs to be used as a request URI in NOTIFY's */
+ parse_ok_contact(p, req);
+
+- build_contact(p);
++ build_contact(p, FALSE);
+ if (gotdest != SIP_GET_DEST_EXTEN_FOUND) {
+ if (gotdest == SIP_GET_DEST_INVALID_URI) {
+ transmit_response(p, "416 Unsupported URI scheme", req);
+@@ -27629,6 +27651,9 @@
+ } else if (!strcasecmp(v->name, "buggymwi")) {
+ ast_set_flag(&mask[1], SIP_PAGE2_BUGGY_MWI);
+ ast_set2_flag(&flags[1], ast_true(v->value), SIP_PAGE2_BUGGY_MWI);
++ } else if (!strcasecmp(v->name, "use_sip_instance")) {
++ ast_set_flag(&mask[2], SIP_PAGE3_USE_INSTANCE_ID);
++ ast_set2_flag(&flags[2], ast_true(v->value), SIP_PAGE3_USE_INSTANCE_ID);
+ } else
+ res = 0;
+
+@@ -28918,7 +28943,11 @@
+ ast_clear_flag(&global_flags[1], SIP_PAGE2_TEXTSUPPORT);
+ ast_clear_flag(&global_flags[1], SIP_PAGE2_IGNORESDPVERSION);
+
++ /* Load the SIP instance UUID from ast_db or create a new one. The UUID should never change,
++ so we only create it once. */
++ initiate_sip_instance();
+
++
+ /* Read the [general] config section of sip.conf (or from realtime config) */
+ for (v = ast_variable_browse(cfg, "general"); v; v = v->next) {
+ if (handle_common_options(&setflags[0], &mask[0], v)) {
+Index: channels/sip/include/sip.h
+===================================================================
+--- channels/sip/include/sip.h (.../branches/1.8) (revision 386614)
++++ channels/sip/include/sip.h (.../team/oej/pine-instance-uuid-1.8) (revision 386614)
+@@ -359,9 +359,10 @@
+
+ #define SIP_PAGE3_SNOM_AOC (1 << 0) /*!< DPG: Allow snom aoc messages */
+ #define SIP_PAGE3_DIRECT_MEDIA_OUTGOING (1 << 1) /*!< DP: Only send direct media reinvites on outgoing calls */
++#define SIP_PAGE3_USE_INSTANCE_ID (1 << 22) /*!< GDP: Use SIP instance ID when registering with remote units */
+
+ #define SIP_PAGE3_FLAGS_TO_COPY \
+- (SIP_PAGE3_SNOM_AOC | SIP_PAGE3_DIRECT_MEDIA_OUTGOING)
++ (SIP_PAGE3_SNOM_AOC | SIP_PAGE3_DIRECT_MEDIA_OUTGOING | SIP_PAGE3_USE_INSTANCE_ID)
+
+ /*@}*/
+
+@@ -716,6 +717,7 @@
+ format_t capability; /*!< Supported codecs */
+ int tcp_enabled;
+ int default_max_forwards; /*!< Default max forwards (SIP Anti-loop) */
++ char instance_id[37]; /*!< Unique ID for this domain/configuration to be used as +sip.instance 16 octets, 4 "-" and the end of the string*/
+ };
+
+ /*! \brief The SIP socket definition */
+Index: configure.ac
+===================================================================
+--- configure.ac (.../branches/1.8) (revision 386614)
++++ configure.ac (.../team/oej/pine-instance-uuid-1.8) (revision 386614)
+@@ -466,11 +466,12 @@
+ AC_HEADER_SYS_WAIT
+ AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h libintl.h limits.h locale.h malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h strings.h sys/event.h sys/file.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h termios.h unistd.h utime.h arpa/nameser.h sys/io.h])
+
+-# Any one of these 4 packages support a mandatory requirement, so we want to check on them as early as possible.
++# Any one of these 5 packages support a mandatory requirement, so we want to check on them as early as possible.
+ AST_EXT_LIB_CHECK([TERMCAP], [termcap], [tgetent], [])
+ AST_EXT_LIB_CHECK([TINFO], [tinfo], [tgetent], [])
+ AST_EXT_LIB_CHECK([CURSES], [curses], [initscr], [curses.h])
+ AST_EXT_LIB_CHECK([NCURSES], [ncurses], [initscr], [curses.h])
++AST_EXT_LIB_CHECK([UUID], [uuid], [uuid_generate_random], [uuid/uuid.h], [-luuid])
+
+ EDITLINE_LIB=""
+ if test "x$TERMCAP_LIB" != "x" ; then
+@@ -486,6 +487,10 @@
+ fi
+ AC_SUBST(EDITLINE_LIB)
+
++if test "x$UUID_LIB" == "x"; then
++ AC_MSG_ERROR([*** uuid support not found (this typically means the uuid development package is missing)])
++fi
++
+ # Another mandatory item (unless it's explicitly disabled)
+ AC_ARG_ENABLE([xmldoc],
+ [AS_HELP_STRING([--disable-xmldoc],
+Index: include/asterisk/uuid.h
+===================================================================
+--- include/asterisk/uuid.h (.../branches/1.8) (revision 0)
++++ include/asterisk/uuid.h (.../team/oej/pine-instance-uuid-1.8) (revision 386614)
+@@ -0,0 +1,118 @@
++/*
++ * Asterisk -- An open source telephony toolkit.
++ *
++ * Copyright (C) 2012, Digium, Inc.
++ *
++ * Mark Michelson <mmmichelson at digium.com>
++ *
++ * See http://www.asterisk.org for more information about
++ * the Asterisk project. Please do not directly contact
++ * any of the maintainers of this project for assistance;
++ * the project provides a web site, mailing lists and IRC
++ * channels for your use.
++ *
++ * This program is free software, distributed under the terms of
++ * the GNU General Public License Version 2. See the LICENSE file
++ * at the top of the source tree.
++ */
++
++/*! \file
++ * \brief Universally unique identifier support
++ */
++
++#ifndef _ASTERISK_UUID_H
++#define _ASTERISK_UUID_H
++
++/* Size of an RFC 4122 UUID string plus terminating null byte */
++#define AST_UUID_STR_LEN (36 + 1)
++
++struct ast_uuid;
++
++/*!
++ * \brief Initialize the UUID system
++ */
++void ast_uuid_init(void);
++
++/*!
++ * \brief Generate a UUID
++ *
++ * This function allocates memory on the heap. The returned
++ * pointer must be freed using ast_free()
++ *
++ * \retval NULL Generation failed
++ * \retval non-NULL heap-allocated UUID
++ */
++struct ast_uuid *ast_uuid_generate(void);
++
++/*!
++ * \brief Convert a UUID to a string
++ *
++ * \param uuid The UUID to convert to a string
++ * \param[out] buf The buffer where the UUID string will be stored
++ * \param size The size of the buffer. Must be at least AST_UUID_STR_LEN.
++ * \return The UUID string (a pointer to buf)
++ */
++char *ast_uuid_to_str(const struct ast_uuid *uuid, char *buf, size_t size);
++
++/*!
++ * \brief Generate a UUID string.
++ * \since 12.0.0
++ *
++ * \param buf The buffer where the UUID string will be stored
++ * \param size The size of the buffer. Must be at least AST_UUID_STR_LEN.
++ *
++ * \return The UUID string (a pointer to buf)
++ */
++char *ast_uuid_generate_str(char *buf, size_t size);
++
++/*!
++ * \brief Convert a string to a UUID
++ *
++ * This function allocates memory on the heap. The returned
++ * pointer must be freed using ast_free()
++ *
++ * \param str The string to convert to a UUID
++ * \retval NULL Failed to convert
++ * \retval non-NULL The heap-allocated converted UUID
++ */
++struct ast_uuid *ast_str_to_uuid(const char *str);
++
++/*!
++ * \brief Make a copy of a UUID
++ *
++ * This function allocates memory on the heap. The returned
++ * pointer must be freed using ast_free()
++ *
++ * \param src The source UUID to copy
++ * \retval NULL Failed to copy
++ * \retval non-NULL The heap-allocated duplicate UUID
++ */
++struct ast_uuid *ast_uuid_copy(const struct ast_uuid *src);
++
++/*!
++ * \brief Compare two UUIDs
++ *
++ * \param left First UUID to compare
++ * \param right Second UUID to compare
++ * \retval <0 left is lexicographically less than right
++ * \retval 0 left and right are the same
++ * \retval >0 left is lexicographically greater than right
++ */
++int ast_uuid_compare(const struct ast_uuid *left, const struct ast_uuid *right);
++
++/*!
++ * \brief Clear a UUID by setting it to be a nil UUID (all 0s)
++ *
++ * \param uuid UUID to clear
++ */
++void ast_uuid_clear(struct ast_uuid *uuid);
++
++/*!
++ * \brief Check if a UUID is a nil UUID (all 0s)
++ *
++ * \param uuid UUID to check
++ * \retval 0 The UUID is not nil
++ * \retval non-zero The UUID is nil
++ */
++int ast_uuid_is_nil(const struct ast_uuid *uuid);
++#endif
+
+Egenskapsändringar för: include/asterisk/uuid.h
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++text/plain
+\ No newline at end of property
+Added: svn:keywords
+## -0,0 +1 ##
++Author Date Id Revision
+\ No newline at end of property
+Added: svn:eol-style
+## -0,0 +1 ##
++native
+\ No newline at end of property
+Index: main/uuid.c
+===================================================================
+--- main/uuid.c (.../branches/1.8) (revision 0)
++++ main/uuid.c (.../team/oej/pine-instance-uuid-1.8) (revision 386614)
+@@ -0,0 +1,229 @@
++/*
++ * Asterisk -- An open source telephony toolkit.
++ *
++ * Copyright (C) 2012, Digium, Inc.
++ *
++ * Mark Michelson <mmmichelson at digium.com>
++ *
++ * See http://www.asterisk.org for more information about
++ * the Asterisk project. Please do not directly contact
++ * any of the maintainers of this project for assistance;
++ * the project provides a web site, mailing lists and IRC
++ * channels for your use.
++ *
++ * This program is free software, distributed under the terms of
++ * the GNU General Public License Version 2. See the LICENSE file
++ * at the top of the source tree.
++ */
++
++/*! \file
++ * \brief Universally unique identifier support
++ */
++
++#include "asterisk.h"
++#include <uuid/uuid.h>
++#include <fcntl.h>
++
++#include "asterisk/uuid.h"
++#include "asterisk/utils.h"
++#include "asterisk/strings.h"
++#include "asterisk/logger.h"
++#include "asterisk/lock.h"
++
++AST_MUTEX_DEFINE_STATIC(uuid_lock);
++
++static int has_dev_urandom;
++
++struct ast_uuid {
++ uuid_t uu;
++};
++
++/*!
++ * \internal
++ * \brief Generate a UUID.
++ * \since 12.0.0
++ *
++ * \param uuid Fill this with a generated UUID.
++ *
++ * \return Nothing
++ */
++static void generate_uuid(struct ast_uuid *uuid)
++{
++ /* libuuid provides three methods of generating uuids,
++ * uuid_generate(), uuid_generate_random(), and uuid_generate_time().
++ *
++ * uuid_generate_random() creates a UUID based on random numbers. The method
++ * attempts to use either /dev/urandom or /dev/random to generate random values.
++ * If these resources are unavailable, then random numbers will be generated
++ * using C library calls to generate pseudorandom numbers.
++ * This method of generating UUIDs corresponds to section 4.4 of RFC 4122.
++ *
++ * uuid_generate_time() creates a UUID based on the current time plus
++ * a system identifier (MAC address of the ethernet interface). This
++ * method of generating UUIDs corresponds to section 4.2 of RFC 4122.
++ *
++ * uuid_generate() will check if /dev/urandom or /dev/random is available to
++ * use. If so, it will use uuid_generate_random(). Otherwise, it will use
++ * uuid_generate_time(). The idea is that it avoids using pseudorandom
++ * numbers if necessary.
++ *
++ * For our purposes, we do not use the time-based UUID at all. There are
++ * several reasons for this:
++ *
++ * 1) The time-based algorithm makes use of a daemon process (uuidd) in order
++ * to ensure that any concurrent requests for UUIDs result in unique results.
++ * Use of this daemon is a bit dodgy for a few reasons
++ *
++ * a) libuuid assumes a hardcoded location for the .pid file of the daemon.
++ * However, the daemon could already be running on the system in a different
++ * location than expected. If this is the case, then attempting to connect
++ * to the daemon will fail, and attempting to launch another instance in
++ * the expected location will also fail.
++ *
++ * b) If the daemon is not running, then the first attempt to create a
++ * time-based UUID will result in launching the daemon. Because of the hard-
++ * coded locations that libuuid assumes for the daemon, Asterisk must be
++ * run with permissions that will allow for the daemon to be launched in
++ * the expected directories.
++ *
++ * c) Once the daemon is running, concurrent requests for UUIDs are thread-safe.
++ * However, the actual launching of the daemon is not thread-safe since libuuid
++ * uses no synchronization primitives to ensure that only one thread (or process)
++ * launches the daemon.
++ *
++ * d) When libuuid launches the daemon, it sets an inactivity timer.
++ * If no UUID generation requests are issued in that time period,
++ * then the daemon will exit. If a new request should occur after the daemon
++ * exits, then the daemon will be relaunched. Given point c), we cannot
++ * necessarily guarantee the thread-safety of time-based UUID generation since
++ * we cannot necessarily guarantee the daemon is running as we expect.
++ * We could set up a watchdog thread to generate UUIDs at regular intervals to
++ * prevent the daemon from exiting, but frankly, that sucks.
++ *
++ * 2) Since the MAC address of the Ethernet interface is part of the UUID when
++ * using the time-based method, there is information leaked.
++ *
++ * Given these drawbacks, we stick to only using random UUIDs. The chance of /dev/random
++ * or /dev/urandom not existing on systems in this age is next to none.
++ */
++
++ /* XXX Currently, we only protect this call if the user has no /dev/urandon on their system.
++ * If it turns out that there are issues with UUID generation despite the presence of
++ * /dev/urandom, then we may need to make the locking/unlocking unconditional.
++ */
++ if (!has_dev_urandom) {
++ ast_mutex_lock(&uuid_lock);
++ }
++ uuid_generate_random(uuid->uu);
++ if (!has_dev_urandom) {
++ ast_mutex_unlock(&uuid_lock);
++ }
++}
++
++struct ast_uuid *ast_uuid_generate(void)
++{
++ struct ast_uuid *uuid = ast_malloc(sizeof(*uuid));
++
++ if (!uuid) {
++ return NULL;
++ }
++ generate_uuid(uuid);
++ return uuid;
++}
++
++char *ast_uuid_to_str(const struct ast_uuid *uuid, char *buf, size_t size)
++{
++ ast_assert(size >= AST_UUID_STR_LEN);
++ uuid_unparse_lower(uuid->uu, buf);
++ return buf;
++}
++
++char *ast_uuid_generate_str(char *buf, size_t size)
++{
++ struct ast_uuid uuid;
++
++ generate_uuid(&uuid);
++ return ast_uuid_to_str(&uuid, buf, size);
++}
++
++struct ast_uuid *ast_str_to_uuid(const char *str)
++{
++ struct ast_uuid *uuid = ast_malloc(sizeof(*uuid));
++ int res;
++
++ if (!uuid) {
++ return NULL;
++ }
++ res = uuid_parse(str, uuid->uu);
++ if (res) {
++ ast_log(LOG_WARNING, "Unable to convert string %s into a UUID\n", str);
++ ast_free(uuid);
++ return NULL;
++ }
++ return uuid;
++}
++
++struct ast_uuid *ast_uuid_copy(const struct ast_uuid *src)
++{
++ struct ast_uuid *dst = ast_malloc(sizeof(*dst));
++
++ if (!dst) {
++ return NULL;
++ }
++ uuid_copy(dst->uu, src->uu);
++ return dst;
++}
++
++int ast_uuid_compare(const struct ast_uuid *left, const struct ast_uuid *right)
++{
++ return uuid_compare(left->uu, right->uu);
++}
++
++void ast_uuid_clear(struct ast_uuid *uuid)
++{
++ uuid_clear(uuid->uu);
++}
++
++int ast_uuid_is_nil(const struct ast_uuid *uuid)
++{
++ return uuid_is_null(uuid->uu);
++}
++
++void ast_uuid_init(void)
++{
++ /* This requires some explanation.
++ *
++ * libuuid generates UUIDs based on random number generation. This involves
++ * opening a handle to /dev/urandom or /dev/random in order to get random
++ * data for the UUIDs.
++ *
++ * This is thread-safe, to a point. The problem is that the first attempt
++ * to generate a UUID will result in opening the random number handle. Once
++ * the handle is opened, all further generation is thread safe. This
++ * first generation can be potentially risky if multiple threads attempt
++ * to generate a UUID at the same time, though, since there is no thread
++ * synchronization used within libuuid. To get around this potential
++ * issue, we go ahead and generate a UUID up front so that the underlying
++ * work is done before we start requesting UUIDs for real.
++ *
++ * Think of this along the same lines as initializing a singleton.
++ */
++ uuid_t uu;
++ int dev_urandom_fd;
++
++ dev_urandom_fd = open("/dev/urandom", O_RDONLY);
++ if (dev_urandom_fd < 0) {
++ ast_log(LOG_WARNING, "It appears your system does not have /dev/urandom on it. This\n"
++ "means that UUID generation will use a pseudorandom number generator. Since\n"
++ "the thread-safety of your system's random number generator cannot\n"
++ "be guaranteed, we have to synchronize UUID generation. This may result\n"
++ "in decreased performance. It is highly recommended that you set up your\n"
++ "system to have /dev/urandom\n");
++ } else {
++ has_dev_urandom = 1;
++ close(dev_urandom_fd);
++ }
++ uuid_generate_random(uu);
++
++ ast_debug(1, "UUID system initiated\n");
++}
+
+Egenskapsändringar för: main/uuid.c
+___________________________________________________________________
+Added: svn:eol-style
+## -0,0 +1 ##
++native
+\ No newline at end of property
+Added: svn:mime-type
+## -0,0 +1 ##
++text/plain
+\ No newline at end of property
+Added: svn:keywords
+## -0,0 +1 ##
++Author Date Id Revision
+\ No newline at end of property
+Index: configs/sip.conf.sample
+===================================================================
+--- configs/sip.conf.sample (.../branches/1.8) (revision 386614)
++++ configs/sip.conf.sample (.../team/oej/pine-instance-uuid-1.8) (revision 386614)
+@@ -256,6 +256,8 @@
+ ; and subscriptions (seconds)
+ ;minexpiry=60 ; Minimum length of registrations/subscriptions (default 60)
+ ;defaultexpiry=120 ; Default length of incoming/outgoing registration
++;use_sip_instance=n ; Use SIP instance ID when registering. Default off
++ ; (also settable on device-level)
+ ;mwiexpiry=3600 ; Expiry time for outgoing MWI subscriptions
+ ;maxforwards=70 ; Setting for the SIP Max-Forwards: header (loop prevention)
+ ; Default value is 70
Propchange: team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/oej/pine-instance-uuid-1.8/patches/pine-instance-uuid-1.8.diff
------------------------------------------------------------------------------
svn:mime-type = text/plain
More information about the asterisk-commits
mailing list