* #36737: switch back to svn repo, remove assert in sip_transaction.c
diff --git a/jni/pjproject-android/.svn/pristine/cd/cdd4cbcae8cc0bd349b4c51fff4cb8279dbad45b.svn-base b/jni/pjproject-android/.svn/pristine/cd/cdd4cbcae8cc0bd349b4c51fff4cb8279dbad45b.svn-base
new file mode 100644
index 0000000..2267ec1
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/cd/cdd4cbcae8cc0bd349b4c51fff4cb8279dbad45b.svn-base
@@ -0,0 +1,508 @@
+/* $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 __PJ_TURN_SRV_TURN_H__
+#define __PJ_TURN_SRV_TURN_H__
+
+#include <pjlib.h>
+#include <pjnath.h>
+
+typedef struct pj_turn_relay_res pj_turn_relay_res;
+typedef struct pj_turn_listener pj_turn_listener;
+typedef struct pj_turn_transport pj_turn_transport;
+typedef struct pj_turn_permission pj_turn_permission;
+typedef struct pj_turn_allocation pj_turn_allocation;
+typedef struct pj_turn_srv pj_turn_srv;
+typedef struct pj_turn_pkt pj_turn_pkt;
+
+
+#define PJ_TURN_INVALID_LIS_ID ((unsigned)-1)
+
+/**
+ * Get transport type name string.
+ */
+PJ_DECL(const char*) pj_turn_tp_type_name(int tp_type);
+
+/**
+ * This structure describes TURN relay resource. An allocation allocates
+ * one relay resource, and optionally it may reserve another resource.
+ */
+struct pj_turn_relay_res
+{
+ /** Hash table key */
+ struct {
+ /** Transport type. */
+ int tp_type;
+
+ /** Transport/relay address */
+ pj_sockaddr addr;
+ } hkey;
+
+ /** Allocation who requested or reserved this resource. */
+ pj_turn_allocation *allocation;
+
+ /** Username used in credential */
+ pj_str_t user;
+
+ /** Realm used in credential. */
+ pj_str_t realm;
+
+ /** Lifetime, in seconds. */
+ unsigned lifetime;
+
+ /** Relay/allocation expiration time */
+ pj_time_val expiry;
+
+ /** Timeout timer entry */
+ pj_timer_entry timer;
+
+ /** Transport. */
+ struct {
+ /** Transport/relay socket */
+ pj_sock_t sock;
+
+ /** Transport/relay ioqueue */
+ pj_ioqueue_key_t *key;
+
+ /** Read operation key. */
+ pj_ioqueue_op_key_t read_key;
+
+ /** The incoming packet buffer */
+ char rx_pkt[PJ_TURN_MAX_PKT_LEN];
+
+ /** Source address of the packet. */
+ pj_sockaddr src_addr;
+
+ /** Source address length */
+ int src_addr_len;
+
+ /** The outgoing packet buffer. This must be 3wbit aligned. */
+ char tx_pkt[PJ_TURN_MAX_PKT_LEN+4];
+ } tp;
+};
+
+
+/****************************************************************************/
+/*
+ * TURN Allocation API
+ */
+
+/**
+ * This structure describes key to lookup TURN allocations in the
+ * allocation hash table.
+ */
+typedef struct pj_turn_allocation_key
+{
+ int tp_type; /**< Transport type. */
+ pj_sockaddr clt_addr; /**< Client's address. */
+} pj_turn_allocation_key;
+
+
+/**
+ * This structure describes TURN pj_turn_allocation session.
+ */
+struct pj_turn_allocation
+{
+ /** Hash table key to identify client. */
+ pj_turn_allocation_key hkey;
+
+ /** Pool for this allocation. */
+ pj_pool_t *pool;
+
+ /** Object name for logging identification */
+ char *obj_name;
+
+ /** Client info (IP address and port) */
+ char info[80];
+
+ /** Mutex */
+ pj_lock_t *lock;
+
+ /** Server instance. */
+ pj_turn_srv *server;
+
+ /** Transport to send/receive packets to/from client. */
+ pj_turn_transport *transport;
+
+ /** The relay resource for this allocation. */
+ pj_turn_relay_res relay;
+
+ /** Relay resource reserved by this allocation, if any */
+ pj_turn_relay_res *resv;
+
+ /** Requested bandwidth */
+ unsigned bandwidth;
+
+ /** STUN session for this client */
+ pj_stun_session *sess;
+
+ /** Credential for this STUN session. */
+ pj_stun_auth_cred cred;
+
+ /** Peer hash table (keyed by peer address) */
+ pj_hash_table_t *peer_table;
+
+ /** Channel hash table (keyed by channel number) */
+ pj_hash_table_t *ch_table;
+};
+
+
+/**
+ * This structure describes the hash table key to lookup TURN
+ * permission.
+ */
+typedef struct pj_turn_permission_key
+{
+ /** Peer address. */
+ pj_sockaddr peer_addr;
+
+} pj_turn_permission_key;
+
+
+/**
+ * This structure describes TURN pj_turn_permission or channel.
+ */
+struct pj_turn_permission
+{
+ /** Hash table key */
+ pj_turn_permission_key hkey;
+
+ /** TURN allocation that owns this permission/channel */
+ pj_turn_allocation *allocation;
+
+ /** Optional channel number, or PJ_TURN_INVALID_CHANNEL if channel number
+ * is not requested for this permission.
+ */
+ pj_uint16_t channel;
+
+ /** Permission expiration time. */
+ pj_time_val expiry;
+};
+
+/**
+ * Create new allocation.
+ */
+PJ_DECL(pj_status_t) pj_turn_allocation_create(pj_turn_transport *transport,
+ const pj_sockaddr_t *src_addr,
+ unsigned src_addr_len,
+ const pj_stun_rx_data *rdata,
+ pj_stun_session *srv_sess,
+ pj_turn_allocation **p_alloc);
+/**
+ * Destroy allocation.
+ */
+PJ_DECL(void) pj_turn_allocation_destroy(pj_turn_allocation *alloc);
+
+
+/**
+ * Handle incoming packet from client.
+ */
+PJ_DECL(void) pj_turn_allocation_on_rx_client_pkt(pj_turn_allocation *alloc,
+ pj_turn_pkt *pkt);
+
+/**
+ * Handle transport closure.
+ */
+PJ_DECL(void) pj_turn_allocation_on_transport_closed(pj_turn_allocation *alloc,
+ pj_turn_transport *tp);
+
+/****************************************************************************/
+/*
+ * TURN Listener API
+ */
+
+/**
+ * This structure describes TURN listener socket. A TURN listener socket
+ * listens for incoming connections from clients.
+ */
+struct pj_turn_listener
+{
+ /** Object name/identification */
+ char *obj_name;
+
+ /** Slightly longer info about this listener */
+ char info[80];
+
+ /** TURN server instance. */
+ pj_turn_srv *server;
+
+ /** Listener index in the server */
+ unsigned id;
+
+ /** Pool for this listener. */
+ pj_pool_t *pool;
+
+ /** Transport type. */
+ int tp_type;
+
+ /** Bound address of this listener. */
+ pj_sockaddr addr;
+
+ /** Socket. */
+ pj_sock_t sock;
+
+ /** Flags. */
+ unsigned flags;
+
+ /** Destroy handler */
+ pj_status_t (*destroy)(pj_turn_listener*);
+};
+
+
+/**
+ * This structure describes TURN transport socket which is used to send and
+ * receive packets towards client.
+ */
+struct pj_turn_transport
+{
+ /** Object name/identification */
+ char *obj_name;
+
+ /** Slightly longer info about this listener */
+ char *info;
+
+ /** Listener instance */
+ pj_turn_listener *listener;
+
+ /** Sendto handler */
+ pj_status_t (*sendto)(pj_turn_transport *tp,
+ const void *packet,
+ pj_size_t size,
+ unsigned flag,
+ const pj_sockaddr_t *addr,
+ int addr_len);
+
+ /** Addref handler */
+ void (*add_ref)(pj_turn_transport *tp,
+ pj_turn_allocation *alloc);
+
+ /** Decref handler */
+ void (*dec_ref)(pj_turn_transport *tp,
+ pj_turn_allocation *alloc);
+
+};
+
+
+/**
+ * An incoming packet.
+ */
+struct pj_turn_pkt
+{
+ /** Pool for this packet */
+ pj_pool_t *pool;
+
+ /** Transport where the packet was received. */
+ pj_turn_transport *transport;
+
+ /** Packet buffer (must be 32bit aligned). */
+ pj_uint8_t pkt[PJ_TURN_MAX_PKT_LEN];
+
+ /** Size of the packet */
+ pj_size_t len;
+
+ /** Arrival time. */
+ pj_time_val rx_time;
+
+ /** Source transport type and source address. */
+ pj_turn_allocation_key src;
+
+ /** Source address length. */
+ int src_addr_len;
+};
+
+
+/**
+ * Create a UDP listener on the specified port.
+ */
+PJ_DECL(pj_status_t) pj_turn_listener_create_udp(pj_turn_srv *srv,
+ int af,
+ const pj_str_t *bound_addr,
+ unsigned port,
+ unsigned concurrency_cnt,
+ unsigned flags,
+ pj_turn_listener **p_lis);
+
+/**
+ * Create a TCP listener on the specified port.
+ */
+PJ_DECL(pj_status_t) pj_turn_listener_create_tcp(pj_turn_srv *srv,
+ int af,
+ const pj_str_t *bound_addr,
+ unsigned port,
+ unsigned concurrency_cnt,
+ unsigned flags,
+ pj_turn_listener **p_lis);
+
+/**
+ * Destroy listener.
+ */
+PJ_DECL(pj_status_t) pj_turn_listener_destroy(pj_turn_listener *listener);
+
+
+/**
+ * Add a reference to a transport.
+ */
+PJ_DECL(void) pj_turn_transport_add_ref(pj_turn_transport *transport,
+ pj_turn_allocation *alloc);
+
+
+/**
+ * Decrement transport reference counter.
+ */
+PJ_DECL(void) pj_turn_transport_dec_ref(pj_turn_transport *transport,
+ pj_turn_allocation *alloc);
+
+
+
+/****************************************************************************/
+/*
+ * TURN Server API
+ */
+/**
+ * This structure describes TURN pj_turn_srv instance.
+ */
+struct pj_turn_srv
+{
+ /** Object name */
+ char *obj_name;
+
+ /** Core settings */
+ struct {
+ /** Pool factory */
+ pj_pool_factory *pf;
+
+ /** Pool for this server instance. */
+ pj_pool_t *pool;
+
+ /** Global Ioqueue */
+ pj_ioqueue_t *ioqueue;
+
+ /** Mutex */
+ pj_lock_t *lock;
+
+ /** Global timer heap instance. */
+ pj_timer_heap_t *timer_heap;
+
+ /** Number of listeners */
+ unsigned lis_cnt;
+
+ /** Array of listeners. */
+ pj_turn_listener **listener;
+
+ /** STUN session to handle initial Allocate request. */
+ pj_stun_session *stun_sess;
+
+ /** Number of worker threads. */
+ unsigned thread_cnt;
+
+ /** Array of worker threads. */
+ pj_thread_t **thread;
+
+ /** Thread quit signal */
+ pj_bool_t quit;
+
+ /** STUN config. */
+ pj_stun_config stun_cfg;
+
+ /** STUN auth credential. */
+ pj_stun_auth_cred cred;
+
+ /** Thread local ID for storing credential */
+ long tls_key, tls_data;
+
+ } core;
+
+
+ /** Hash tables */
+ struct {
+ /** Allocations hash table, indexed by transport type and
+ * client address.
+ */
+ pj_hash_table_t *alloc;
+
+ /** Relay resource hash table, indexed by transport type and
+ * relay address.
+ */
+ pj_hash_table_t *res;
+
+ } tables;
+
+ /** Ports settings */
+ struct {
+ /** Minimum UDP port number. */
+ pj_uint16_t min_udp;
+
+ /** Maximum UDP port number. */
+ pj_uint16_t max_udp;
+
+ /** Next UDP port number. */
+ pj_uint16_t next_udp;
+
+
+ /** Minimum TCP port number. */
+ pj_uint16_t min_tcp;
+
+ /** Maximum TCP port number. */
+ pj_uint16_t max_tcp;
+
+ /** Next TCP port number. */
+ pj_uint16_t next_tcp;
+
+ } ports;
+};
+
+
+/**
+ * Create server.
+ */
+PJ_DECL(pj_status_t) pj_turn_srv_create(pj_pool_factory *pf,
+ pj_turn_srv **p_srv);
+
+/**
+ * Destroy server.
+ */
+PJ_DECL(pj_status_t) pj_turn_srv_destroy(pj_turn_srv *srv);
+
+/**
+ * Add listener.
+ */
+PJ_DECL(pj_status_t) pj_turn_srv_add_listener(pj_turn_srv *srv,
+ pj_turn_listener *lis);
+
+/**
+ * Register an allocation.
+ */
+PJ_DECL(pj_status_t) pj_turn_srv_register_allocation(pj_turn_srv *srv,
+ pj_turn_allocation *alloc);
+
+/**
+ * Unregister an allocation.
+ */
+PJ_DECL(pj_status_t) pj_turn_srv_unregister_allocation(pj_turn_srv *srv,
+ pj_turn_allocation *alloc);
+
+/**
+ * This callback is called by UDP listener on incoming packet.
+ */
+PJ_DECL(void) pj_turn_srv_on_rx_pkt(pj_turn_srv *srv,
+ pj_turn_pkt *pkt);
+
+
+#endif /* __PJ_TURN_SRV_TURN_H__ */
+