* #36737: switch back to svn repo, remove assert in sip_transaction.c
diff --git a/jni/pjproject-android/.svn/pristine/0f/0f0c80fe2eb574e457f925696a7490db609b82c6.svn-base b/jni/pjproject-android/.svn/pristine/0f/0f0c80fe2eb574e457f925696a7490db609b82c6.svn-base
new file mode 100644
index 0000000..e6d94f1
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/0f/0f0c80fe2eb574e457f925696a7490db609b82c6.svn-base
@@ -0,0 +1,71 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/**
+ * \page page_strerror_c Samples: Print out error message
+ *
+ * This file is pjsip-apps/src/samples/strerror.c
+ *
+ * \includelineno strerror.c
+ */
+
+
+#include <pjlib.h>
+#include <pjlib-util.h>
+#include <pjsip.h>
+#include <pjmedia.h>
+#include <pjnath.h>
+#include <pjsip_simple.h>
+
+/*
+ * main()
+ */
+int main(int argc, char *argv[])
+{
+ pj_caching_pool cp;
+ pjmedia_endpt *med_ept;
+ pjsip_endpoint *sip_ept;
+ char errmsg[PJ_ERR_MSG_SIZE];
+ pj_status_t code;
+
+ if (argc != 2) {
+ puts("Usage: strerror ERRNUM");
+ return 1;
+ }
+
+ pj_log_set_level(3);
+
+ pj_init();
+ pj_caching_pool_init(&cp, NULL, 0);
+ pjlib_util_init();
+ pjnath_init();
+ pjmedia_endpt_create(&cp.factory, NULL, 0, &med_ept);
+ pjsip_endpt_create(&cp.factory, "localhost", &sip_ept);
+ pjsip_evsub_init_module(sip_ept);
+
+ code = atoi(argv[1]);
+ pj_strerror(code, errmsg, sizeof(errmsg));
+
+ printf("Status %d: %s\n", code, errmsg);
+
+ pj_shutdown();
+ return 0;
+}
+
diff --git a/jni/pjproject-android/.svn/pristine/0f/0f1c6ca358f67a7dfc7398f834e2c56e804a957e.svn-base b/jni/pjproject-android/.svn/pristine/0f/0f1c6ca358f67a7dfc7398f834e2c56e804a957e.svn-base
new file mode 100644
index 0000000..38532d2
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/0f/0f1c6ca358f67a7dfc7398f834e2c56e804a957e.svn-base
@@ -0,0 +1,35 @@
+# $Id$
+import inc_sip as sip
+import inc_sdp as sdp
+
+# Answer with codec G722.1 should choose the same bitrate
+# which in this test is 32000
+
+sdp = \
+"""
+v=0
+o=- 3428650655 3428650655 IN IP4 192.168.1.9
+s=pjmedia
+c=IN IP4 192.168.1.9
+t=0 0
+a=X-nat:0
+m=audio 4000 RTP/AVP 100 101
+a=rtcp:4001 IN IP4 192.168.1.9
+a=rtpmap:100 G7221/16000
+a=fmtp:100 bitrate=32000
+a=sendrecv
+a=rtpmap:101 telephone-event/8000
+a=fmtp:101 0-15
+"""
+
+pjsua_args = "--null-audio --auto-answer 200 --add-codec G7221"
+extra_headers = ""
+include = ["a=rtpmap:[\d]+ G7221/16000", # response must choose G722.1
+ "fmtp:[\d]+ bitrate=32000" # response must choose the same bitrate
+ ]
+exclude = []
+
+sendto_cfg = sip.SendtoCfg("Answer with G722.1 should choose bitrate 32000", pjsua_args, sdp, 200,
+ extra_headers=extra_headers,
+ resp_inc=include, resp_exc=exclude)
+
diff --git a/jni/pjproject-android/.svn/pristine/0f/0f1e25596403ef12fc91ebc6f1cf118a5da30d65.svn-base b/jni/pjproject-android/.svn/pristine/0f/0f1e25596403ef12fc91ebc6f1cf118a5da30d65.svn-base
new file mode 100644
index 0000000..4c5ef67
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/0f/0f1e25596403ef12fc91ebc6f1cf118a5da30d65.svn-base
@@ -0,0 +1,332 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef __PJMEDIA_FRAME_H__
+#define __PJMEDIA_FRAME_H__
+
+/**
+ * @file pjmedia/frame.h Media frame
+ * @brief Frame
+ */
+#include <pjmedia/types.h>
+#include <pj/string.h>
+
+/**
+ * @defgroup PJMEDIA_FRAME Media frame
+ * @ingroup PJMEDIA_TYPES
+ * @brief Frame
+ * @{
+ */
+
+PJ_BEGIN_DECL
+
+
+/**
+ * Types of media frame.
+ */
+typedef enum pjmedia_frame_type
+{
+ PJMEDIA_FRAME_TYPE_NONE, /**< No frame. */
+ PJMEDIA_FRAME_TYPE_AUDIO, /**< Normal audio frame. */
+ PJMEDIA_FRAME_TYPE_EXTENDED, /**< Extended audio frame. */
+ PJMEDIA_FRAME_TYPE_VIDEO /**< Video frame. */
+
+} pjmedia_frame_type;
+
+
+/**
+ * This structure describes a media frame.
+ */
+typedef struct pjmedia_frame
+{
+ pjmedia_frame_type type; /**< Frame type. */
+ void *buf; /**< Pointer to buffer. */
+ pj_size_t size; /**< Frame size in bytes. */
+ pj_timestamp timestamp; /**< Frame timestamp. */
+ pj_uint32_t bit_info; /**< Bit info of the frame, sample case:
+ a frame may not exactly start and end
+ at the octet boundary, so this field
+ may be used for specifying start &
+ end bit offset. */
+} pjmedia_frame;
+
+
+/**
+ * The pjmedia_frame_ext is used to carry a more complex audio frames than
+ * the typical PCM audio frames, and it is signaled by setting the "type"
+ * field of a pjmedia_frame to PJMEDIA_FRAME_TYPE_EXTENDED. With this set,
+ * application may typecast pjmedia_frame to pjmedia_frame_ext.
+ *
+ * This structure may contain more than one audio frames, which subsequently
+ * will be called subframes in this structure. The subframes section
+ * immediately follows the end of this structure, and each subframe is
+ * represented by pjmedia_frame_ext_subframe structure. Every next
+ * subframe immediately follows the previous subframe, and all subframes
+ * are byte-aligned although its payload may not be byte-aligned.
+ */
+
+#pragma pack(1)
+typedef struct pjmedia_frame_ext {
+ pjmedia_frame base; /**< Base frame info */
+ pj_uint16_t samples_cnt; /**< Number of samples in this frame */
+ pj_uint16_t subframe_cnt; /**< Number of (sub)frames in this frame */
+
+ /* Zero or more (sub)frames follows immediately after this,
+ * each will be represented by pjmedia_frame_ext_subframe
+ */
+} pjmedia_frame_ext;
+#pragma pack()
+
+/**
+ * This structure represents the individual subframes in the
+ * pjmedia_frame_ext structure.
+ */
+#pragma pack(1)
+typedef struct pjmedia_frame_ext_subframe {
+ pj_uint16_t bitlen; /**< Number of bits in the data */
+ pj_uint8_t data[1]; /**< Start of encoded data */
+} pjmedia_frame_ext_subframe;
+
+#pragma pack()
+
+/**
+ * Copy one frame to another. If the destination frame's size is smaller than
+ * the source frame's, the destination buffer will be truncated.
+ *
+ * @param src Source frame.
+ * @param dst Destination frame.
+ */
+PJ_INLINE(void) pjmedia_frame_copy(pjmedia_frame *dst,
+ const pjmedia_frame *src)
+{
+ dst->type = src->type;
+ dst->timestamp = src->timestamp;
+ dst->bit_info = src->bit_info;
+ dst->size = (dst->size < src->size? dst->size: src->size);
+ pj_memcpy(dst->buf, src->buf, dst->size);
+}
+
+/**
+ * Append one subframe to #pjmedia_frame_ext.
+ *
+ * @param frm The #pjmedia_frame_ext.
+ * @param src Subframe data.
+ * @param bitlen Length of subframe, in bits.
+ * @param samples_cnt Number of audio samples in subframe.
+ */
+PJ_INLINE(void) pjmedia_frame_ext_append_subframe(pjmedia_frame_ext *frm,
+ const void *src,
+ unsigned bitlen,
+ unsigned samples_cnt)
+{
+ pjmedia_frame_ext_subframe *fsub;
+ pj_uint8_t *p;
+ unsigned i;
+
+ p = (pj_uint8_t*)frm + sizeof(pjmedia_frame_ext);
+ for (i = 0; i < frm->subframe_cnt; ++i) {
+ fsub = (pjmedia_frame_ext_subframe*) p;
+ p += sizeof(fsub->bitlen) + ((fsub->bitlen+7) >> 3);
+ }
+
+ fsub = (pjmedia_frame_ext_subframe*) p;
+ fsub->bitlen = (pj_uint16_t)bitlen;
+ if (bitlen)
+ pj_memcpy(fsub->data, src, (bitlen+7) >> 3);
+
+ frm->subframe_cnt++;
+ frm->samples_cnt = (pj_uint16_t)(frm->samples_cnt + samples_cnt);
+}
+
+/**
+ * Get a subframe from #pjmedia_frame_ext.
+ *
+ * @param frm The #pjmedia_frame_ext.
+ * @param n Subframe index, zero based.
+ *
+ * @return The n-th subframe, or NULL if n is out-of-range.
+ */
+PJ_INLINE(pjmedia_frame_ext_subframe*)
+pjmedia_frame_ext_get_subframe(const pjmedia_frame_ext *frm, unsigned n)
+{
+ pjmedia_frame_ext_subframe *sf = NULL;
+
+ if (n < frm->subframe_cnt) {
+ pj_uint8_t *p;
+ unsigned i;
+
+ p = (pj_uint8_t*)frm + sizeof(pjmedia_frame_ext);
+ for (i = 0; i < n; ++i) {
+ sf = (pjmedia_frame_ext_subframe*) p;
+ p += sizeof(sf->bitlen) + ((sf->bitlen+7) >> 3);
+ }
+
+ sf = (pjmedia_frame_ext_subframe*) p;
+ }
+
+ return sf;
+}
+
+/**
+ * Extract all frame payload to the specified buffer.
+ *
+ * @param frm The frame.
+ * @param dst Destination buffer.
+ * @param maxlen Maximum size to copy (i.e. the size of the
+ * destination buffer).
+ *
+ * @return Total size of payload copied.
+ */
+PJ_INLINE(unsigned)
+pjmedia_frame_ext_copy_payload(const pjmedia_frame_ext *frm,
+ void *dst,
+ unsigned maxlen)
+{
+ unsigned i, copied=0;
+ for (i=0; i<frm->subframe_cnt; ++i) {
+ pjmedia_frame_ext_subframe *sf;
+ unsigned sz;
+
+ sf = pjmedia_frame_ext_get_subframe(frm, i);
+ if (!sf)
+ continue;
+
+ sz = ((sf->bitlen + 7) >> 3);
+ if (sz + copied > maxlen)
+ break;
+
+ pj_memcpy(((pj_uint8_t*)dst) + copied, sf->data, sz);
+ copied += sz;
+ }
+ return copied;
+}
+
+
+/**
+ * Pop out first n subframes from #pjmedia_frame_ext.
+ *
+ * @param frm The #pjmedia_frame_ext.
+ * @param n Number of first subframes to be popped out.
+ *
+ * @return PJ_SUCCESS when successful.
+ */
+PJ_INLINE(pj_status_t)
+pjmedia_frame_ext_pop_subframes(pjmedia_frame_ext *frm, unsigned n)
+{
+ pjmedia_frame_ext_subframe *sf;
+ pj_uint8_t *move_src;
+ pj_size_t move_len;
+
+ if (frm->subframe_cnt <= n) {
+ frm->subframe_cnt = 0;
+ frm->samples_cnt = 0;
+ return PJ_SUCCESS;
+ }
+
+ move_src = (pj_uint8_t*)pjmedia_frame_ext_get_subframe(frm, n);
+ sf = pjmedia_frame_ext_get_subframe(frm, frm->subframe_cnt-1);
+ move_len = ((pj_uint8_t*)sf - move_src + sizeof(sf->bitlen) +
+ ((sf->bitlen+7) >> 3));
+ pj_memmove((pj_uint8_t*)frm+sizeof(pjmedia_frame_ext),
+ move_src, move_len);
+
+ frm->samples_cnt = (pj_uint16_t)
+ (frm->samples_cnt - n*frm->samples_cnt/frm->subframe_cnt);
+ frm->subframe_cnt = (pj_uint16_t) (frm->subframe_cnt - n);
+
+ return PJ_SUCCESS;
+}
+
+
+/**
+ * This is a general purpose function set PCM samples to zero.
+ * Since this function is needed by many parts of the library,
+ * by putting this functionality in one place, it enables some.
+ * clever people to optimize this function.
+ *
+ * @param samples The 16bit PCM samples.
+ * @param count Number of samples.
+ */
+PJ_INLINE(void) pjmedia_zero_samples(pj_int16_t *samples, unsigned count)
+{
+#if 1
+ pj_bzero(samples, (count<<1));
+#elif 0
+ unsigned i;
+ for (i=0; i<count; ++i) samples[i] = 0;
+#else
+ unsigned i;
+ count >>= 1;
+ for (i=0; i<count; ++i) ((pj_int32_t*)samples)[i] = (pj_int32_t)0;
+#endif
+}
+
+
+/**
+ * This is a general purpose function to copy samples from/to buffers with
+ * equal size. Since this function is needed by many parts of the library,
+ * by putting this functionality in one place, it enables some.
+ * clever people to optimize this function.
+ */
+PJ_INLINE(void) pjmedia_copy_samples(pj_int16_t *dst, const pj_int16_t *src,
+ unsigned count)
+{
+#if 1
+ pj_memcpy(dst, src, (count<<1));
+#elif 0
+ unsigned i;
+ for (i=0; i<count; ++i) dst[i] = src[i];
+#else
+ unsigned i;
+ count >>= 1;
+ for (i=0; i<count; ++i)
+ ((pj_int32_t*)dst)[i] = ((pj_int32_t*)src)[i];
+#endif
+}
+
+
+/**
+ * This is a general purpose function to copy samples from/to buffers with
+ * equal size. Since this function is needed by many parts of the library,
+ * by putting this functionality in one place, it enables some.
+ * clever people to optimize this function.
+ */
+PJ_INLINE(void) pjmedia_move_samples(pj_int16_t *dst, const pj_int16_t *src,
+ unsigned count)
+{
+#if 1
+ pj_memmove(dst, src, (count<<1));
+#elif 0
+ unsigned i;
+ for (i=0; i<count; ++i) dst[i] = src[i];
+#else
+ unsigned i;
+ count >>= 1;
+ for (i=0; i<count; ++i)
+ ((pj_int32_t*)dst)[i] = ((pj_int32_t*)src)[i];
+#endif
+}
+
+PJ_END_DECL
+
+/**
+ * @}
+ */
+
+#endif /* __PJMEDIA_FRAME_H__ */
diff --git a/jni/pjproject-android/.svn/pristine/0f/0f8f4bd550ce3c51cdf5f0b9102d524824b0e2be.svn-base b/jni/pjproject-android/.svn/pristine/0f/0f8f4bd550ce3c51cdf5f0b9102d524824b0e2be.svn-base
new file mode 100644
index 0000000..d453f44
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/0f/0f8f4bd550ce3c51cdf5f0b9102d524824b0e2be.svn-base
@@ -0,0 +1,29 @@
+<?xml version="1.0" ?>
+<Scenario site="$(HOSTNAME)" url="http://my.cdash.org/submit.php?project=PJSIP" wdir="$(PJDIR)">
+
+ <Submit group="Experimental" build="$(SUFFIX)-$(GCC)" exclude="(.*amr.*)">
+ <Update />
+ <FileWrite file="user.mak">
+ <![CDATA[
+# Written by ccdash
+export CFLAGS += -Wno-unused-label -g
+]]>
+ </FileWrite>
+ <FileWrite file="pjlib/include/pj/config_site.h">
+ <![CDATA[
+/* Written by ccdash */
+#define PJ_HAS_IPV6 1
+#define PJMEDIA_HAS_G7221_CODEC 1
+]]>
+ </FileWrite>
+ <Configure cmd="./aconfigure" />
+ <Build cmd="make dep && make clean && make" />
+ <Test name="pjlib-test" wdir="pjlib/bin" cmd="./pjlib-test-$(SUFFIX)" disabled=$(NOTEST) />
+ <Test name="pjlib-util-test" wdir="pjlib-util/bin" cmd="./pjlib-util-test-$(SUFFIX)" disabled=$(NOTEST) />
+ <Test name="pjnath-test" wdir="pjnath/bin" cmd="./pjnath-test-$(SUFFIX)" disabled=$(NOTEST) />
+ <Test name="pjmedia-test" wdir="pjmedia/bin" cmd="./pjmedia-test-$(SUFFIX)" disabled=$(NOTEST) />
+ <Test name="pjsip-test" wdir="pjsip/bin" cmd="./pjsip-test-$(SUFFIX)" disabled=$(NOTEST) />
+ $(PJSUA-TESTS)
+ </Submit>
+
+</Scenario>
diff --git a/jni/pjproject-android/.svn/pristine/0f/0fa238a167f1a7f0c671e03c0509965aef80a571.svn-base b/jni/pjproject-android/.svn/pristine/0f/0fa238a167f1a7f0c671e03c0509965aef80a571.svn-base
new file mode 100644
index 0000000..770a2a7
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/0f/0fa238a167f1a7f0c671e03c0509965aef80a571.svn-base
@@ -0,0 +1,215 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef __PJLIB_UTIL_SRV_RESOLVER_H__
+#define __PJLIB_UTIL_SRV_RESOLVER_H__
+
+/**
+ * @file srv_resolver.h
+ * @brief DNS SRV resolver
+ */
+#include <pjlib-util/resolver.h>
+
+PJ_BEGIN_DECL
+
+/**
+ * @defgroup PJ_DNS_SRV_RESOLVER DNS SRV Resolution Helper
+ * @ingroup PJ_DNS
+ * @{
+ *
+ * \section PJ_DNS_SRV_RESOLVER_INTRO DNS SRV Resolution Helper
+ *
+ * This module provides an even higher layer of abstraction for the DNS
+ * resolution framework, to resolve DNS SRV names.
+ *
+ * The #pj_dns_srv_resolve() function will asynchronously resolve the server
+ * name into IP address(es) with a single function call. If the SRV name
+ * contains multiple names, then each will be resolved with individual
+ * DNS A resolution to get the IP addresses. Upon successful completion,
+ * application callback will be called with each IP address of the
+ * target selected based on the load-balancing and fail-over criteria
+ * below.
+ *
+ * When the resolver fails to resolve the name using DNS SRV resolution
+ * (for example when the DNS SRV record is not present in the DNS server),
+ * the resolver will fallback to using DNS A record resolution to resolve
+ * the name.
+ *
+ * \subsection PJ_DNS_SRV_RESOLVER_FAILOVER_LOADBALANCE Load-Balancing and Fail-Over
+ *
+ * When multiple targets are returned in the DNS SRV response, server entries
+ * are selected based on the following rule (which is described in RFC 2782):
+ * - targets will be sorted based on the priority first.
+ * - for targets with the same priority, #pj_dns_srv_resolve() will select
+ * only one target according to its weight. To select this one target,
+ * the function associates running-sum for all targets, and generates
+ * a random number between zero and the total running-sum (inclusive).
+ * The target selected is the first target with running-sum greater than
+ * or equal to this random number.
+ *
+ * The above procedure will select one target for each priority, allowing
+ * application to fail-over to the next target when the previous target fails.
+ * These targets are returned in the #pj_dns_srv_record structure
+ * argument of the callback.
+ *
+ * \section PJ_DNS_SRV_RESOLVER_REFERENCE Reference
+ *
+ * Reference:
+ * - <A HREF="http://www.ietf.org/rfc/rfc2782.txt">RFC 2782</A>:
+ * A DNS RR for specifying the location of services (DNS SRV)
+ */
+
+/**
+ * Flags to be specified when starting the DNS SRV query.
+ */
+typedef enum pj_dns_srv_option
+{
+ /**
+ * Specify if the resolver should fallback with DNS A
+ * resolution when the SRV resolution fails. This option may
+ * be specified together with PJ_DNS_SRV_FALLBACK_AAAA to
+ * make the resolver fallback to AAAA if SRV resolution fails,
+ * and then to DNS A resolution if the AAAA resolution fails.
+ */
+ PJ_DNS_SRV_FALLBACK_A = 1,
+
+ /**
+ * Specify if the resolver should fallback with DNS AAAA
+ * resolution when the SRV resolution fails. This option may
+ * be specified together with PJ_DNS_SRV_FALLBACK_A to
+ * make the resolver fallback to AAAA if SRV resolution fails,
+ * and then to DNS A resolution if the AAAA resolution fails.
+ */
+ PJ_DNS_SRV_FALLBACK_AAAA = 2,
+
+ /**
+ * Specify if the resolver should try to resolve with DNS AAAA
+ * resolution first of each targets in the DNS SRV record. If
+ * this option is not specified, the SRV resolver will query
+ * the DNS A record for the target instead.
+ */
+ PJ_DNS_SRV_RESOLVE_AAAA = 4
+
+} pj_dns_srv_option;
+
+
+/**
+ * This structure represents DNS SRV records as the result of DNS SRV
+ * resolution using #pj_dns_srv_resolve().
+ */
+typedef struct pj_dns_srv_record
+{
+ /** Number of address records. */
+ unsigned count;
+
+ /** Address records. */
+ struct
+ {
+ /** Server priority (the lower the higher the priority). */
+ unsigned priority;
+
+ /** Server weight (the higher the more load it can handle). */
+ unsigned weight;
+
+ /** Port number. */
+ pj_uint16_t port;
+
+ /** The host address. */
+ pj_dns_a_record server;
+
+ } entry[PJ_DNS_SRV_MAX_ADDR];
+
+} pj_dns_srv_record;
+
+
+/** Opaque declaration for DNS SRV query */
+typedef struct pj_dns_srv_async_query pj_dns_srv_async_query;
+
+/**
+ * Type of callback function to receive notification from the resolver
+ * when the resolution process completes.
+ */
+typedef void pj_dns_srv_resolver_cb(void *user_data,
+ pj_status_t status,
+ const pj_dns_srv_record *rec);
+
+
+/**
+ * Start DNS SRV resolution for the specified name. The full name of the
+ * entry will be concatenated from \a res_name and \a domain_name fragments.
+ *
+ * @param domain_name The domain name part of the name.
+ * @param res_name The full service name, including the transport name
+ * and with all the leading underscore characters and
+ * ending dot (e.g. "_sip._udp.", "_stun._udp.").
+ * @param def_port The port number to be assigned to the resolved address
+ * when the DNS SRV resolution fails and the name is
+ * resolved with DNS A resolution.
+ * @param pool Memory pool used to allocate memory for the query.
+ * @param resolver The resolver instance.
+ * @param option Option flags, which can be constructed from
+ * #pj_dns_srv_option bitmask. Note that this argument
+ * was called "fallback_a" in pjsip version 0.8.0 and
+ * older, but the new option should be backward
+ * compatible with existing applications. If application
+ * specifies PJ_TRUE as "fallback_a" value, it will
+ * correspond to PJ_DNS_SRV_FALLBACK_A option.
+ * @param token Arbitrary data to be associated with this query when
+ * the calback is called.
+ * @param cb Pointer to callback function to receive the
+ * notification when the resolution process completes.
+ * @param p_query Optional pointer to receive the query object, if one
+ * was started. If this pointer is specified, a NULL may
+ * be returned if response cache is available immediately.
+ *
+ * @return PJ_SUCCESS on success, or the appropriate error code.
+ */
+PJ_DECL(pj_status_t) pj_dns_srv_resolve(const pj_str_t *domain_name,
+ const pj_str_t *res_name,
+ unsigned def_port,
+ pj_pool_t *pool,
+ pj_dns_resolver *resolver,
+ unsigned option,
+ void *token,
+ pj_dns_srv_resolver_cb *cb,
+ pj_dns_srv_async_query **p_query);
+
+
+/**
+ * Cancel an outstanding DNS SRV query.
+ *
+ * @param query The pending asynchronous query to be cancelled.
+ * @param notify If non-zero, the callback will be called with failure
+ * status to notify that the query has been cancelled.
+ *
+ * @return PJ_SUCCESS on success, or the appropriate error code,
+ */
+PJ_DECL(pj_status_t) pj_dns_srv_cancel_query(pj_dns_srv_async_query *query,
+ pj_bool_t notify);
+
+
+/**
+ * @}
+ */
+
+PJ_END_DECL
+
+
+#endif /* __PJLIB_UTIL_SRV_RESOLVER_H__ */
+
diff --git a/jni/pjproject-android/.svn/pristine/0f/0fbc1c5f330812f616b7a74bd1f11b989bde02e0.svn-base b/jni/pjproject-android/.svn/pristine/0f/0fbc1c5f330812f616b7a74bd1f11b989bde02e0.svn-base
new file mode 100644
index 0000000..119c15b
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/0f/0fbc1c5f330812f616b7a74bd1f11b989bde02e0.svn-base
@@ -0,0 +1,11 @@
+/*
+========================================================================
+ Name : pjsuaContainer.loc
+ Author : nanang
+ Copyright : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description :
+========================================================================
+*/
+#ifdef LANGUAGE_01
+#include "pjsuaContainer.l01"
+#endif
diff --git a/jni/pjproject-android/.svn/pristine/0f/0fdbe9a6f1bfb8b8511d5f59023bc71103d6e91e.svn-base b/jni/pjproject-android/.svn/pristine/0f/0fdbe9a6f1bfb8b8511d5f59023bc71103d6e91e.svn-base
new file mode 100644
index 0000000..029ee8d
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/0f/0fdbe9a6f1bfb8b8511d5f59023bc71103d6e91e.svn-base
@@ -0,0 +1,81 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#include <pj/guid.h>
+#include <pj/assert.h>
+#include <pj/rand.h>
+#include <pj/os.h>
+#include <pj/string.h>
+
+PJ_DEF_DATA(const unsigned) PJ_GUID_STRING_LENGTH=32;
+
+static char guid_chars[64];
+
+PJ_DEF(unsigned) pj_GUID_STRING_LENGTH()
+{
+ return PJ_GUID_STRING_LENGTH;
+}
+
+static void init_guid_chars(void)
+{
+ char *p = guid_chars;
+ unsigned i;
+
+ for (i=0; i<10; ++i)
+ *p++ = '0'+i;
+
+ for (i=0; i<26; ++i) {
+ *p++ = 'a'+i;
+ *p++ = 'A'+i;
+ }
+
+ *p++ = '-';
+ *p++ = '.';
+}
+
+PJ_DEF(pj_str_t*) pj_generate_unique_string(pj_str_t *str)
+{
+ char *p, *end;
+
+ PJ_CHECK_STACK();
+
+ if (guid_chars[0] == '\0') {
+ pj_enter_critical_section();
+ if (guid_chars[0] == '\0') {
+ init_guid_chars();
+ }
+ pj_leave_critical_section();
+ }
+
+ /* This would only work if PJ_GUID_STRING_LENGTH is multiple of 2 bytes */
+ pj_assert(PJ_GUID_STRING_LENGTH % 2 == 0);
+
+ for (p=str->ptr, end=p+PJ_GUID_STRING_LENGTH; p<end; ) {
+ pj_uint32_t rand_val = pj_rand();
+ pj_uint32_t rand_idx = RAND_MAX;
+
+ for ( ; rand_idx>0 && p<end; rand_idx>>=8, rand_val>>=8, p++) {
+ *p = guid_chars[(rand_val & 0xFF) & 63];
+ }
+ }
+
+ str->slen = PJ_GUID_STRING_LENGTH;
+ return str;
+}
+