diff --git a/jni/pjproject-android/.svn/pristine/f3/f337bc4dfd93732af9a14119ce2961b2a6e4c224.svn-base b/jni/pjproject-android/.svn/pristine/f3/f337bc4dfd93732af9a14119ce2961b2a6e4c224.svn-base
new file mode 100644
index 0000000..83a4074
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f337bc4dfd93732af9a14119ce2961b2a6e4c224.svn-base
@@ -0,0 +1,20 @@
+# $Id$
+import inc_sip as sip
+import inc_sdp as sdp
+
+pjsua = "--null-audio --id=sip:CLIENT --registrar sip:127.0.0.1:$PORT " + \
+	"--realm=python --user=username --password=password " + \
+	"--auto-update-nat=0 --reg-timeout 300"
+
+# 423 Response with Min-Expires header that is lower than what the client
+# had requested
+req1 = sip.RecvfromTransaction("Initial request", 423,
+				include=["REGISTER sip"], 
+				exclude=[],
+				resp_hdr=["Min-Expires: 250"],
+				expect="invalid Min-Expires"
+
+			  	)
+
+recvfrom_cfg = sip.RecvfromCfg("Invalid 423 response to REGISTER",
+			       pjsua, [req1])
diff --git a/jni/pjproject-android/.svn/pristine/f3/f34188cd9ed85f18f8726a6cac0f43d8ef01a731.svn-base b/jni/pjproject-android/.svn/pristine/f3/f34188cd9ed85f18f8726a6cac0f43d8ef01a731.svn-base
new file mode 100644
index 0000000..1f928e7
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f34188cd9ed85f18f8726a6cac0f43d8ef01a731.svn-base
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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             -->
+<!--                                                                    -->
+<!--                 Sipp default 'uas' scenario.                       -->
+<!--                                                                    -->
+
+<scenario name="Basic UAS responder">
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv request="INVITE" crlf="true">
+  </recv>
+
+  <!-- The '[last_*]' keyword is replaced automatically by the          -->
+  <!-- specified header if it was present in the last message received  -->
+  <!-- (except if it was a retransmission). If the header was not       -->
+  <!-- present or if no message has been received, the '[last_*]'       -->
+  <!-- keyword is discarded, and all bytes until the end of the line    -->
+  <!-- are also discarded.                                              -->
+  <!--                                                                  -->
+  <!-- If the specified header was present several times in the         -->
+  <!-- message, all occurences are concatenated (CRLF seperated)        -->
+  <!-- to be used in place of the '[last_*]' keyword.                   -->
+
+  <send retrans="500">
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Type: application/sdp
+
+      v=0
+      o=- 3441953879 3441953879 IN IP4 192.168.0.15
+      s=pjmedia
+      c=IN IP4 192.168.0.15
+      t=0 0
+      m=audio 4004 RTP/SAVP 0 101
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-15
+      a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:D4Mf5fIPqxwse/lLrVc2XhLk7NSL6JI0k0Jps4Br
+
+    ]]>
+  </send>
+
+  <recv request="ACK" crlf="true">
+  </recv>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/jni/pjproject-android/.svn/pristine/f3/f37284937f3c00c0785df71634d3471e0951c38f.svn-base b/jni/pjproject-android/.svn/pristine/f3/f37284937f3c00c0785df71634d3471e0951c38f.svn-base
new file mode 100644
index 0000000..45480b8
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f37284937f3c00c0785df71634d3471e0951c38f.svn-base
@@ -0,0 +1,19 @@
+# $Id$
+#
+from inc_cfg import *
+
+ADD_PARAM = ""
+
+if (HAS_SND_DEV == 0):
+	ADD_PARAM += "--null-audio"
+
+# Call with iLBC codec
+test_param = TestParam(
+		"PESQ codec iLBC",
+		[
+			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --add-codec ilbc --clock-rate 8000 --play-file wavs/input.8.wav"),
+			InstanceParam("UA2", "--null-audio --max-calls=1 --add-codec ilbc --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200")
+		]
+		)
+
+pesq_threshold = 3.0
diff --git a/jni/pjproject-android/.svn/pristine/f3/f3a704de5b06ac5d9883641a9145dc124f779886.svn-base b/jni/pjproject-android/.svn/pristine/f3/f3a704de5b06ac5d9883641a9145dc124f779886.svn-base
new file mode 100644
index 0000000..8595260
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f3a704de5b06ac5d9883641a9145dc124f779886.svn-base
@@ -0,0 +1,261 @@
+/*
+========================================================================
+ Name        : PjsuaContainerView.cpp
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <aknviewappui.h>
+#include <eikmenub.h>
+#include <avkon.hrh>
+#include <barsread.h>
+#include <eikimage.h>
+#include <eikenv.h>
+#include <stringloader.h>
+#include <eiklabel.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <eikbtgpc.h>
+#include <pjsua.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+
+#include "pjsua.hrh"
+#include "pjsuaContainerView.h"
+#include "pjsuaContainer.h"
+// ]]] end generated region [Generated User Includes]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+CpjsuaContainerView::CpjsuaContainerView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	iPjsuaContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CpjsuaContainerView::~CpjsuaContainerView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	delete iPjsuaContainer;
+	iPjsuaContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance then calls the second-phase constructor
+ * without leaving the instance on the cleanup stack.
+ * @return new instance of CpjsuaContainerView
+ */
+CpjsuaContainerView* CpjsuaContainerView::NewL()
+	{
+	CpjsuaContainerView* self = CpjsuaContainerView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance, pushes it on the cleanup stack,
+ * then calls the second-phase constructor.
+ * @return new instance of CpjsuaContainerView
+ */
+CpjsuaContainerView* CpjsuaContainerView::NewLC()
+	{
+	CpjsuaContainerView* self = new ( ELeave ) CpjsuaContainerView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void CpjsuaContainerView::ConstructL()
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	BaseConstructL( R_PJSUA_CONTAINER_PJSUA_CONTAINER_VIEW );
+				
+	// ]]] end generated region [Generated Code]
+	
+	// add your own initialization code here
+	}
+
+/**
+ * @return The UID for this view
+ */
+TUid CpjsuaContainerView::Id() const
+	{
+	return TUid::Uid( EPjsuaContainerViewId );
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void CpjsuaContainerView::HandleCommandL( TInt aCommand )
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	TBool commandHandled = EFalse;
+	switch ( aCommand )
+		{	// code to dispatch to the AknView's menu and CBA commands is generated here
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+	
+		if ( aCommand == EAknSoftkeyBack )
+			{
+			AppUi()->HandleCommandL( EEikCmdExit );
+			}
+	
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void CpjsuaContainerView::DoActivateL( 
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	SetupStatusPaneL();
+	
+				
+				
+	
+	if ( iPjsuaContainer == NULL )
+		{
+		iPjsuaContainer = CreateContainerL();
+		iPjsuaContainer->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iPjsuaContainer );
+		} 
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/**
+ */
+void CpjsuaContainerView::DoDeactivate()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CleanupStatusPane();
+	
+	if ( iPjsuaContainer != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iPjsuaContainer );
+		delete iPjsuaContainer;
+		iPjsuaContainer = NULL;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void CpjsuaContainerView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TVwsViewId view;
+	AppUi()->GetActiveViewId( view );
+	if ( view.iViewUid == Id() )
+		{
+		TInt result;
+		TRAP( result, SetupStatusPaneL() );
+		}
+
+	// Hide menu
+	Cba()->MakeVisible(EFalse);
+	
+	//PutMessage("HandleStatusPaneSizeChange()");
+	
+	// [[[ begin generated region: do not modify [Generated Code]
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+// [[[ begin generated function: do not modify
+void CpjsuaContainerView::SetupStatusPaneL()
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_PJSUA_CONTAINER_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+				
+	}
+
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+void CpjsuaContainerView::CleanupStatusPane()
+	{
+	}
+
+// ]]] end generated function
+
+/**
+ *	Creates the top-level container for the view.  You may modify this method's
+ *	contents and the CPjsuaContainer::NewL() signature as needed to initialize the
+ *	container, but the signature for this method is fixed.
+ *	@return new initialized instance of CPjsuaContainer
+ */
+CPjsuaContainer* CpjsuaContainerView::CreateContainerL()
+	{
+	return CPjsuaContainer::NewL( ClientRect(), NULL, this );
+	}
+
+void CpjsuaContainerView::PutMessage( const char *msg )
+{
+	if (!iPjsuaContainer)
+	    return;
+
+	TRAPD(result, iPjsuaContainer->PutMessageL(msg));
+}
diff --git a/jni/pjproject-android/.svn/pristine/f3/f3a7c6646562374fdf42b3272d7b67564b1487bd.svn-base b/jni/pjproject-android/.svn/pristine/f3/f3a7c6646562374fdf42b3272d7b67564b1487bd.svn-base
new file mode 100644
index 0000000..639c0be
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f3a7c6646562374fdf42b3272d7b67564b1487bd.svn-base
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pjproject-vs8-wm2003-common-defaults"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;$(ARCHFAM);$(_ARCHFAM_)"
+		DebugInformationFormat="3"
+		DisableSpecificWarnings="4214;4201"
+	/>
+	<Tool
+		Name="VCLinkerTool"
+		AdditionalDependencies="secchk.lib ccrtrtti.lib"
+		SubSystem="9"
+		StackReserveSize="65536"
+		StackCommitSize="4096"
+		EntryPointSymbol="WinMainCRTStartup"
+		TargetMachine="3"
+	/>
+	<Tool
+		Name="VCResourceCompilerTool"
+		PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;$(ARCHFAM);$(_ARCHFAM_)"
+	/>
+	<UserMacro
+		Name="TargetCPU"
+		Value="armv4"
+	/>
+</VisualStudioPropertySheet>
diff --git a/jni/pjproject-android/.svn/pristine/f3/f3b326ac0bde7140d560922c2d80d527239c3150.svn-base b/jni/pjproject-android/.svn/pristine/f3/f3b326ac0bde7140d560922c2d80d527239c3150.svn-base
new file mode 100644
index 0000000..56e6d3e
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f3b326ac0bde7140d560922c2d80d527239c3150.svn-base
@@ -0,0 +1,19 @@
+//
+//  ipjsuaAppDelegate.h
+//  ipjsua
+//
+//  Created by Liong Sauw Ming on 13/3/13.
+//  Copyright (c) 2013 Teluu. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class ipjsuaViewController;
+
+@interface ipjsuaAppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+@property (strong, nonatomic) ipjsuaViewController *viewController;
+
+@end
diff --git a/jni/pjproject-android/.svn/pristine/f3/f3e2e66df16610fe0ddafde8bc01574def7987f2.svn-base b/jni/pjproject-android/.svn/pristine/f3/f3e2e66df16610fe0ddafde8bc01574def7987f2.svn-base
new file mode 100644
index 0000000..0c847a9
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f3e2e66df16610fe0ddafde8bc01574def7987f2.svn-base
@@ -0,0 +1,58 @@
+EXPORTS
+	pjsip_100rel_attach                      @ 1 NONAME
+	pjsip_100rel_create_prack                @ 2 NONAME
+	pjsip_100rel_end_session                 @ 3 NONAME
+	pjsip_100rel_init_module                 @ 4 NONAME
+	pjsip_100rel_is_reliable                 @ 5 NONAME
+	pjsip_100rel_on_rx_prack                 @ 6 NONAME
+	pjsip_100rel_send_prack                  @ 7 NONAME
+	pjsip_100rel_tx_response                 @ 8 NONAME
+	pjsip_create_sdp_body                    @ 9 NONAME
+	pjsip_dlg_get_inv_session                @ 10 NONAME
+	pjsip_get_prack_method                   @ 11 NONAME
+	pjsip_get_refer_method                   @ 12 NONAME
+	pjsip_inv_answer                         @ 13 NONAME
+	pjsip_inv_create_ack                     @ 14 NONAME
+	pjsip_inv_create_uac                     @ 15 NONAME
+	pjsip_inv_create_uas                     @ 16 NONAME
+	pjsip_inv_end_session                    @ 17 NONAME
+	pjsip_inv_initial_answer                 @ 18 NONAME
+	pjsip_inv_invite                         @ 19 NONAME
+	pjsip_inv_reinvite                       @ 20 NONAME
+	pjsip_inv_send_msg                       @ 21 NONAME
+	pjsip_inv_set_sdp_answer                 @ 22 NONAME
+	pjsip_inv_state_name                     @ 23 NONAME
+	pjsip_inv_terminate                      @ 24 NONAME
+	pjsip_inv_update                         @ 25 NONAME
+	pjsip_inv_usage_init                     @ 26 NONAME
+	pjsip_inv_usage_instance                 @ 27 NONAME
+	pjsip_inv_verify_request                 @ 28 NONAME
+	pjsip_prack_method                       @ 29 NONAME
+	pjsip_refer_method                       @ 30 NONAME
+	pjsip_regc_add_headers                   @ 31 NONAME
+	pjsip_regc_create                        @ 32 NONAME
+	pjsip_regc_destroy                       @ 33 NONAME
+	pjsip_regc_get_info                      @ 34 NONAME
+	pjsip_regc_get_pool                      @ 35 NONAME
+	pjsip_regc_init                          @ 36 NONAME
+	pjsip_regc_register                      @ 37 NONAME
+	pjsip_regc_send                          @ 38 NONAME
+	pjsip_regc_set_credentials               @ 39 NONAME
+	pjsip_regc_set_prefs                     @ 40 NONAME
+	pjsip_regc_set_route_set                 @ 41 NONAME
+	pjsip_regc_set_transport                 @ 42 NONAME
+	pjsip_regc_unregister                    @ 43 NONAME
+	pjsip_regc_unregister_all                @ 44 NONAME
+	pjsip_regc_update_contact                @ 45 NONAME
+	pjsip_regc_update_expires                @ 46 NONAME
+	pjsip_replaces_hdr_create                @ 47 NONAME
+	pjsip_replaces_init_module               @ 48 NONAME
+	pjsip_replaces_verify_request            @ 49 NONAME
+	pjsip_xfer_accept                        @ 50 NONAME
+	pjsip_xfer_create_uac                    @ 51 NONAME
+	pjsip_xfer_create_uas                    @ 52 NONAME
+	pjsip_xfer_current_notify                @ 53 NONAME
+	pjsip_xfer_init_module                   @ 54 NONAME
+	pjsip_xfer_initiate                      @ 55 NONAME
+	pjsip_xfer_notify                        @ 56 NONAME
+	pjsip_xfer_send_request                  @ 57 NONAME
diff --git a/jni/pjproject-android/.svn/pristine/f3/f3ed5b9bd988ac12d055a1fd595c5ed3f41bfe66.svn-base b/jni/pjproject-android/.svn/pristine/f3/f3ed5b9bd988ac12d055a1fd595c5ed3f41bfe66.svn-base
new file mode 100644
index 0000000..7529a7b
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f3ed5b9bd988ac12d055a1fd595c5ed3f41bfe66.svn-base
@@ -0,0 +1,80 @@
+/* $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_SHA1_H__
+#define __PJLIB_UTIL_SHA1_H__
+
+/**
+ * @file sha1.h
+ * @brief SHA1 encryption implementation
+ */
+
+#include <pj/types.h>
+
+PJ_BEGIN_DECL
+
+/**
+ * @defgroup PJLIB_UTIL_SHA1 SHA1
+ * @ingroup PJLIB_UTIL_ENCRYPTION
+ * @{
+ */
+
+/** SHA1 context */
+typedef struct pj_sha1_context
+{
+    pj_uint32_t state[5];	/**< State  */
+    pj_uint32_t count[2];	/**< Count  */
+    pj_uint8_t	buffer[64];	/**< Buffer */
+} pj_sha1_context;
+
+/** SHA1 digest size is 20 bytes */
+#define PJ_SHA1_DIGEST_SIZE	20
+
+
+/** Initialize the algorithm. 
+ *  @param ctx		SHA1 context.
+ */
+PJ_DECL(void) pj_sha1_init(pj_sha1_context *ctx);
+
+/** Append a stream to the message. 
+ *  @param ctx		SHA1 context.
+ *  @param data		Data.
+ *  @param nbytes	Length of data.
+ */
+PJ_DECL(void) pj_sha1_update(pj_sha1_context *ctx, 
+			     const pj_uint8_t *data, 
+			     const pj_size_t nbytes);
+
+/** Finish the message and return the digest. 
+ *  @param ctx		SHA1 context.
+ *  @param digest	16 byte digest.
+ */
+PJ_DECL(void) pj_sha1_final(pj_sha1_context *ctx, 
+			    pj_uint8_t digest[PJ_SHA1_DIGEST_SIZE]);
+
+
+/**
+ * @}
+ */
+
+PJ_END_DECL
+
+
+#endif	/* __PJLIB_UTIL_SHA1_H__ */
+
diff --git a/jni/pjproject-android/.svn/pristine/f3/f3f313d49f33ae7a6935c00e726dc3feef38e707.svn-base b/jni/pjproject-android/.svn/pristine/f3/f3f313d49f33ae7a6935c00e726dc3feef38e707.svn-base
new file mode 100644
index 0000000..6262d91
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/f3/f3f313d49f33ae7a6935c00e726dc3feef38e707.svn-base
Binary files differ
