diff --git a/jni/pjproject-android/.svn/pristine/08/088d0f09d07e9ba5e09515d9159a6c3a9ef3c492.svn-base b/jni/pjproject-android/.svn/pristine/08/088d0f09d07e9ba5e09515d9159a6c3a9ef3c492.svn-base
new file mode 100644
index 0000000..6ea1595
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/08/088d0f09d07e9ba5e09515d9159a6c3a9ef3c492.svn-base
@@ -0,0 +1,53 @@
+/* $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/os.h>
+
+#include "test.h"
+
+ 
+/* Any tests that want to build a linked executable for RTEMS must include
+   this header to get a default config for the network stack. */
+#if defined(PJ_RTEMS) 
+#   include <bsp.h>
+#   include <rtems.h>
+#   include <rtems/rtems_bsdnet.h>
+#   include "../../../pjlib/include/rtems-network-config.h"
+#endif
+
+static int main_func(int argc, char *argv[])
+{
+    int rc;
+    char s[10];
+
+    rc = test_main();
+
+    if (argc == 2 && argv[1][0]=='-' && argv[1][1]=='i') {
+	puts("\nPress <ENTER> to quit");
+	if (fgets(s, sizeof(s), stdin) == NULL)
+	    return rc;
+    }
+
+    return rc;
+}
+
+int main(int argc, char *argv[])
+{
+    return pj_run_app(&main_func, argc, argv, 0);
+}
diff --git a/jni/pjproject-android/.svn/pristine/08/0895c792fdfff6e4ce445adaacb83726a7f4ed06.svn-base b/jni/pjproject-android/.svn/pristine/08/0895c792fdfff6e4ce445adaacb83726a7f4ed06.svn-base
new file mode 100644
index 0000000..1b0b9d5
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/08/0895c792fdfff6e4ce445adaacb83726a7f4ed06.svn-base
@@ -0,0 +1,84 @@
+/* $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_ECHO_INTERNAL_H__
+#define __PJMEDIA_ECHO_INTERNAL_H__
+
+#include <pjmedia/types.h>
+
+PJ_BEGIN_DECL
+
+/*
+ * Simple echo suppressor
+ */
+PJ_DECL(pj_status_t) echo_supp_create(pj_pool_t *pool,
+				      unsigned clock_rate,
+				      unsigned channel_count,
+				      unsigned samples_per_frame,
+				      unsigned tail_ms,
+				      unsigned options,
+				      void **p_state );
+PJ_DECL(pj_status_t) echo_supp_destroy(void *state);
+PJ_DECL(void) echo_supp_reset(void *state);
+PJ_DECL(pj_status_t) echo_supp_cancel_echo(void *state,
+					   pj_int16_t *rec_frm,
+					   const pj_int16_t *play_frm,
+					   unsigned options,
+					   void *reserved );
+
+PJ_DECL(pj_status_t) speex_aec_create(pj_pool_t *pool,
+				      unsigned clock_rate,
+				      unsigned channel_count,
+				      unsigned samples_per_frame,
+				      unsigned tail_ms,
+				      unsigned options,
+				      void **p_state );
+PJ_DECL(pj_status_t) speex_aec_destroy(void *state );
+PJ_DECL(void) speex_aec_reset(void *state );
+PJ_DECL(pj_status_t) speex_aec_cancel_echo(void *state,
+					   pj_int16_t *rec_frm,
+					   const pj_int16_t *play_frm,
+					   unsigned options,
+					   void *reserved );
+PJ_DECL(pj_status_t) speex_aec_playback(void *state,
+					pj_int16_t *play_frm );
+PJ_DECL(pj_status_t) speex_aec_capture(void *state,
+				       pj_int16_t *rec_frm,
+				       unsigned options );
+
+PJ_DECL(pj_status_t) ipp_aec_create(pj_pool_t *pool,
+				    unsigned clock_rate,
+				    unsigned channel_count,
+				    unsigned samples_per_frame,
+				    unsigned tail_ms,
+				    unsigned options,
+				    void **p_echo );
+PJ_DECL(pj_status_t) ipp_aec_destroy(void *state );
+PJ_DECL(void) ipp_aec_reset(void *state );
+PJ_DECL(pj_status_t) ipp_aec_cancel_echo(void *state,
+					 pj_int16_t *rec_frm,
+					 const pj_int16_t *play_frm,
+					 unsigned options,
+					 void *reserved );
+
+
+PJ_END_DECL
+
+#endif
+
