Update MAC OSX support

This commit is contained in:
bossiel 2010-02-23 21:28:29 +00:00
parent 3e7bc38376
commit f6b0884b3d
11 changed files with 4579 additions and 2429 deletions

View File

@ -64,6 +64,12 @@
# define _CRT_SECURE_NO_WARNINGS
#endif
/* Detecting C99 compilers
*/
#if (__STDC_VERSION__ == 199901L) && !defined(__C99__)
# define __C99__
#endif
#include <stdint.h>
#ifdef __SYMBIAN32__
#include <stdlib.h>

View File

@ -1,60 +1,100 @@
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO 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 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO 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 DOUBANGO.
*
*/
/**@file tipsec_common.c
* @brief IPSec common functions.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#include "tipsec_common.h"
#include "tsk_debug.h"
#if !HAVE_IPSEC_VISTA && !HAVE_IPSEC_XP && !HAVE_IPSEC_RACOON
int tipsec_start(tipsec_context_t* ctx)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
int tipsec_set_local(tipsec_context_t* ctx, const char* addr_local, const char* addr_remote, tipsec_port_t port_uc, tipsec_port_t port_us)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
int tipsec_set_remote(tipsec_context_t* ctx, tipsec_spi_t spi_pc, tipsec_spi_t spi_ps, tipsec_port_t port_pc, tipsec_port_t port_ps)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
int tipsec_stop(tipsec_context_t* ctx)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO 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 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO 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 DOUBANGO.
*
*/
/**@file tipsec_common.c
* @brief IPSec common functions.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#include "tipsec_common.h"
#include "tsk_debug.h"
#if !HAVE_IPSEC_VISTA && !HAVE_IPSEC_XP && !HAVE_IPSEC_RACOON
int tipsec_start(tipsec_context_t* ctx)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
int tipsec_set_local(tipsec_context_t* ctx, const char* addr_local, const char* addr_remote, tipsec_port_t port_uc, tipsec_port_t port_us)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
int tipsec_set_remote(tipsec_context_t* ctx, tipsec_spi_t spi_pc, tipsec_spi_t spi_ps, tipsec_port_t port_pc, tipsec_port_t port_ps, tipsec_lifetime_t lifetime)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
int tipsec_stop(tipsec_context_t* ctx)
{
TSK_DEBUG_ERROR("No IPSec implementation found.");
return -1;
}
//=================================================================================================
// IPSec context object definition
//
static void* tipsec_context_create(void * self, va_list * app)
{
tipsec_context_t *context = self;
if(context)
{
}
bail:
return self;
}
static void* tipsec_context_destroy(void * self)
{
tipsec_context_t *context = self;
if(context)
{
}
return self;
}
static int tipsec_context_cmp(const void *obj1, const void *obj2)
{
return-1;
}
static const tsk_object_def_t tipsec_context_def_s =
{
sizeof(tipsec_context_t),
tipsec_context_create,
tipsec_context_destroy,
tipsec_context_cmp,
};
const void *tipsec_context_def_t = &tipsec_context_def_s;
#endif

File diff suppressed because it is too large Load Diff

View File

@ -45,6 +45,7 @@ typedef struct transport_socket_s
{
tnet_fd_t fd;
unsigned connected:1;
unsigned owner:1;
}
transport_socket_t;
@ -60,9 +61,9 @@ typedef struct transport_context_s
}
transport_context_t;
static void transport_socket_add(tnet_fd_t fd, transport_context_t *context);
static void transport_socket_set_connected(tnet_fd_t fd, transport_context_t *context, int connected);
static void transport_socket_remove(int index, transport_context_t *context);
static void addSocket(tnet_fd_t fd, transport_context_t *context, int take_ownership);
static void setConnected(tnet_fd_t fd, transport_context_t *context, int connected);
static void removeSocket(int index, transport_context_t *context);
/* Checks if socket is connected */
int tnet_transport_isconnected(const tnet_transport_handle_t *handle, tnet_fd_t fd)
@ -90,23 +91,21 @@ int tnet_transport_isconnected(const tnet_transport_handle_t *handle, tnet_fd_t
return 0;
}
int tnet_transport_add_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd)
int tnet_transport_add_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd, int take_ownership)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
transport_context_t *context;
int ret = -1;
if(!transport)
{
if(!transport){
TSK_DEBUG_ERROR("Invalid server handle.");
return ret;
}
context = (transport_context_t*)transport->context;
if(context)
{
if((context = (transport_context_t*)transport->context)){
static char c = '\0';
transport_socket_add(fd, context);
addSocket(fd, context, take_ownership);
// signal
ret = write(context->pipeW, &c, 1);
@ -118,6 +117,46 @@ int tnet_transport_add_socket(const tnet_transport_handle_t *handle, tnet_fd_t f
return -1;
}
/* Remove socket
*/
int tnet_transport_remove_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
transport_context_t *context;
int ret = -1;
size_t i;
int found = 0;
if(!transport){
TSK_DEBUG_ERROR("Invalid server handle.");
return ret;
}
if(!(context = (transport_context_t*)transport->context)){
TSK_DEBUG_ERROR("Invalid context.");
return -2;
}
for(i=0; i<context->count; i++){
if(context->sockets[i]->fd == fd){
removeSocket(i, context);
found = 1;
break;
}
}
if(found){
/* Signal */
static char c = '\0';
ret = write(context->pipeW, &c, 1);
return (ret > 0 ? 0 : ret);
}
// ...
return -1;
}
tnet_fd_t tnet_transport_connectto(const tnet_transport_handle_t *handle, const char* host, tnet_port_t port)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
@ -153,7 +192,7 @@ tnet_fd_t tnet_transport_connectto(const tnet_transport_handle_t *handle, const
}
/* Add the socket */
if((status = tnet_transport_add_socket(handle, fd)))
if((status = tnet_transport_add_socket(handle, fd, 1)))
{
TNET_PRINT_LAST_ERROR("Failed to add new socket.");
@ -187,7 +226,7 @@ tnet_fd_t tnet_transport_connectto(const tnet_transport_handle_t *handle, const
}
/* update connection status */
transport_socket_set_connected(fd, transport->context, (status==0));
setConnected(fd, transport->context, (status==0));
bail:
return fd;
@ -243,14 +282,13 @@ bail:
return numberOfBytesSent;
}
int tnet_transport_has_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd)
int tnet_transport_have_socket(const tnet_transport_handle_t *handle, tnet_fd_t fd)
{
tnet_transport_t *transport = (tnet_transport_t*)handle;
transport_context_t *context;
size_t i;
if(!transport)
{
if(!transport){
TSK_DEBUG_ERROR("Invalid server handle.");
return 0;
}
@ -269,10 +307,11 @@ int tnet_transport_has_socket(const tnet_transport_handle_t *handle, tnet_fd_t f
}
/*== Add new socket ==*/
void transport_socket_add(tnet_fd_t fd, transport_context_t *context)
void addSocket(tnet_fd_t fd, transport_context_t *context, int take_ownership)
{
transport_socket_t *sock = tsk_calloc(1, sizeof(transport_socket_t));
sock->fd = fd;
sock->owner = take_ownership ? 1 : 0;
context->ufds[context->count].fd = fd;
context->ufds[context->count].events = context->events;
@ -282,7 +321,7 @@ void transport_socket_add(tnet_fd_t fd, transport_context_t *context)
}
/*== change connection state ==*/
static void transport_socket_set_connected(tnet_fd_t fd, transport_context_t *context, int connected)
static void setConnected(tnet_fd_t fd, transport_context_t *context, int connected)
{
size_t i;
@ -296,18 +335,21 @@ static void transport_socket_set_connected(tnet_fd_t fd, transport_context_t *co
}
/*== Remove socket ==*/
void transport_socket_remove(int index, transport_context_t *context)
void removeSocket(int index, transport_context_t *context)
{
int i;
if(index < (int)context->count)
{
tnet_sockfd_close(&(context->sockets[index]->fd));
/* Close the socket if we are the owner. */
if(context->sockets[index]->owner){
tnet_sockfd_close(&(context->sockets[index]->fd));
}
// Free socket
TSK_FREE(context->sockets[index]);
for(i=index ; i<context->count-1; i++)
{
for(i=index ; i<context->count-1; i++){
context->sockets[i] = context->sockets[i+1];
}
@ -382,10 +424,10 @@ void *tnet_transport_mainthread(void *param)
context->pipeR = pipes[0];
context->pipeW = pipes[1];
transport_socket_add(context->pipeR, context);
addSocket(context->pipeR, context, 1);
/* Add the current transport socket to the context. */
transport_socket_add(transport->master->fd, context);
/* Add the master socket to the context. */
addSocket(transport->master->fd, context, 1);
/* Set transport to active */
transport->active = 1;
@ -452,7 +494,7 @@ void *tnet_transport_mainthread(void *param)
}
//else
{
transport_socket_remove(i, context);
removeSocket(i, context);
TNET_PRINT_LAST_ERROR("recv have failed.");
continue;
}
@ -493,10 +535,10 @@ bail:
transport->active = 0;
/* cleanup */
while(context->count)
{
transport_socket_remove(0, context);
while(context->count){
removeSocket(0, context);
}
TSK_FREE(context);
TSK_DEBUG_INFO("Stopping [%s] server with IP {%s} on port {%d}...", transport->description, transport->master->ip, transport->master->port);
return 0;

View File

@ -54,8 +54,8 @@ typedef struct transport_context_s
}
transport_context_t;
static void transport_socket_add(tnet_fd_t fd, transport_context_t *context, int take_ownership);
static void transport_socket_remove(int index, transport_context_t *context);
static void addSocket(tnet_fd_t fd, transport_context_t *context, int take_ownership);
static void removeSocket(int index, transport_context_t *context);
/* Checks if socket is connected */
int tnet_transport_isconnected(const tnet_transport_handle_t *handle, tnet_fd_t fd)
@ -167,7 +167,7 @@ int tnet_transport_remove_socket(const tnet_transport_handle_t *handle, tnet_fd_
for(i=0; i<context->count; i++){
if(context->sockets[i]->fd == fd){
transport_socket_remove(i, context);
removeSocket(i, context);
found = 1;
break;
}
@ -354,7 +354,7 @@ int CALLBACK AcceptCondFunc(LPWSABUF lpCallerId, LPWSABUF lpCallerData, LPQOS lp
}
/*== Add new socket ==*/
static void transport_socket_add(tnet_fd_t fd, transport_context_t *context, int take_ownership)
static void addSocket(tnet_fd_t fd, transport_context_t *context, int take_ownership)
{
transport_socket_t *sock = tsk_calloc(1, sizeof(transport_socket_t));
sock->fd = fd;
@ -367,7 +367,7 @@ static void transport_socket_add(tnet_fd_t fd, transport_context_t *context, int
}
/*== Remove socket ==*/
static void transport_socket_remove(int index, transport_context_t *context)
static void removeSocket(int index, transport_context_t *context)
{
size_t i;
@ -383,8 +383,7 @@ static void transport_socket_remove(int index, transport_context_t *context)
// Close event
WSACloseEvent(context->events[index]);
for(i=index ; i<context->count-1; i++)
{
for(i=index ; i<context->count-1; i++){
context->sockets[i] = context->sockets[i+1];
context->events[i] = context->events[i+1];
}
@ -639,4 +638,4 @@ bail:
}
#endif /* TNET_UNDER_WINDOWS */

View File

@ -431,9 +431,8 @@ int tnet_getbestsource(const char* destination, tnet_socket_type_t type, tnet_ip
struct sockaddr_storage destAddr;
tnet_addresses_L_t* addresses = 0;
const tsk_list_item_t* item;
#if TNET_UNDER_WINDOWS
DWORD dwBestIfIndex;
#endif
long dwBestIfIndex;
if(!destination || !source){
goto bail;

View File

@ -1,49 +1,52 @@
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO 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 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO 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 DOUBANGO.
*
*/
/**@file tsip_transport_ipsec.h
* @brief SIP/IPSec transport.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TINYSIP_TRANSPORT_IPSEC_H
#define TINYSIP_TRANSPORT_IPSEC_H
#include "tinysip_config.h"
#include "tinysip/transports/tsip_transport.h"
TSIP_BEGIN_DECLS
#define TSIP_TRANSPORT_IPSEC_CREATE(stack, host, port, type, description) tsk_object_new(tsip_transport_ipsec_def_t, stack, (const char*)host, (tnet_port_t)port, (tnet_socket_type_t)type, (const char*) description)
#define TSIP_TRANSPORT_IPSEC(self) ((tsip_transport_ipsec_t*)(self))
int tsip_transport_ipsec_send(struct tsip_transport_ipsec_s* self, tsip_message_t* msg);
int tsip_transport_ipsec_asso_kill(struct tsip_transport_ipsec_s* self);
TINYSIP_GEXTERN const void *tsip_transport_ipsec_def_t;
TSIP_END_DECLS
#endif /* TINYSIP_TRANSPORT_IPSEC_H */
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO 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 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO 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 DOUBANGO.
*
*/
/**@file tsip_transport_ipsec.h
* @brief SIP/IPSec transport.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TINYSIP_TRANSPORT_IPSEC_H
#define TINYSIP_TRANSPORT_IPSEC_H
#include "tinysip_config.h"
#include "tinysip/transports/tsip_transport.h"
TSIP_BEGIN_DECLS
// FD
struct tsip_transport_ipsec_s;
#define TSIP_TRANSPORT_IPSEC_CREATE(stack, host, port, type, description) tsk_object_new(tsip_transport_ipsec_def_t, stack, (const char*)host, (tnet_port_t)port, (tnet_socket_type_t)type, (const char*) description)
#define TSIP_TRANSPORT_IPSEC(self) ((tsip_transport_ipsec_t*)(self))
//int tsip_transport_ipsec_send(struct tsip_transport_ipsec_s* self, tsip_message_t* msg);
int tsip_transport_ipsec_asso_kill(struct tsip_transport_ipsec_s* self);
TINYSIP_GEXTERN const void *tsip_transport_ipsec_def_t;
TSIP_END_DECLS
#endif /* TINYSIP_TRANSPORT_IPSEC_H */

View File

@ -93,26 +93,26 @@ int tsip_registration_callback(const tsip_register_event_t *sipevent)
/* registration part */
switch(sipevent->type)
{
case tsip_ao_register:
{
if(TSIP_RESPONSE_IS_2XX(TSIP_EVENT(sipevent)->sipmessage)){
TSK_DEBUG_INFO("Registration succeed.");
}
else{
TSK_DEBUG_INFO("Registration failed.");
}
break;
}
case tsip_ao_unregister:
{
if(TSIP_RESPONSE_IS_2XX(TSIP_EVENT(sipevent)->sipmessage)){
TSK_DEBUG_INFO("Unregistration succeed.");
}
else{
TSK_DEBUG_INFO("Unregistration failed.");
}
break;
case tsip_ao_register:
{
if(TSIP_RESPONSE_IS_2XX(TSIP_EVENT(sipevent)->sipmessage)){
TSK_DEBUG_INFO("Registration succeed.");
}
else{
TSK_DEBUG_INFO("Registration failed.");
}
break;
}
case tsip_ao_unregister:
{
if(TSIP_RESPONSE_IS_2XX(TSIP_EVENT(sipevent)->sipmessage)){
TSK_DEBUG_INFO("Unregistration succeed.");
}
else{
TSK_DEBUG_INFO("Unregistration failed.");
}
break;
}
default:
@ -135,13 +135,12 @@ void test_stack()
TSIP_STACK_SET_PROXY_CSCF("proxy.sipthor.net", "udp", 0),
//TSIP_STACK_SET_PROXY_CSCF("192.168.0.15", "udp", 0),
TSIP_STACK_SET_PROXY_CSCF_PORT(5060),
TSIP_STACK_SET_SEC_AGREE_MECH("ipsec-3gpp"),
TSIP_STACK_SET_MOBILITY("fixed"),
TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"),
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_PRIVACY("header;id"),
*/
/*
tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback,
TSIP_STACK_SET_DISPLAY_NAME("Mamadou"),
TSIP_STACK_SET_PUBLIC_IDENTITY("sip:mamadou@ericsson.com"),
@ -150,16 +149,15 @@ void test_stack()
TSIP_STACK_SET_REALM("sip:ericsson.com"), // FIXME: without sip:
TSIP_STACK_SET_LOCAL_IP(LOCAL_IP),
//TSIP_STACK_SET_DISCOVERY_NAPTR(1),
TSIP_STACK_SET_PROXY_CSCF("192.168.0.11", "tcp", 0),
TSIP_STACK_SET_PROXY_CSCF("192.168.0.11", "udp", 0),
//TSIP_STACK_SET_PROXY_CSCF("192.168.0.15", "udp", 0),
TSIP_STACK_SET_PROXY_CSCF_PORT(5081),
TSIP_STACK_SET_SEC_AGREE_MECH("ipsec-3gpp"),
TSIP_STACK_SET_MOBILITY("fixed"),
TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"),
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_PRIVACY("header;id"),
*/
/*
tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback,
TSIP_STACK_SET_DISPLAY_NAME("Mamadou"),
TSIP_STACK_SET_PUBLIC_IDENTITY("sip:mamadou@ims.inexbee.com"),
@ -176,7 +174,8 @@ void test_stack()
TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"),
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_PRIVACY("header;id"),
*/
TSIP_STACK_SET_NULL());
tsip_operation_handle_t *op = TSIP_OPERATION_CREATE(stack,
@ -202,7 +201,7 @@ void test_stack()
TSIP_OPERATION_SET_PARAM("expires", "30"),
TSIP_OPERATION_SET_PARAM("package", "reg"),
TSIP_OPERATION_SET_PARAM("accept", "application/reginfo+xml"),
TSIP_OPERATION_SET_PARAM("to", "sip:mamadou@sip2sip.info"),
TSIP_OPERATION_SET_PARAM("to", "sip:mamadou@ericsson.com"),
TSIP_OPERATION_SET_NULL());
tsip_subscribe(stack, op2);

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>ActivePerspectiveName</key>
<string>Debug</string>
<string>Project</string>
<key>AllowedModules</key>
<array>
<dict>
@ -200,8 +200,8 @@
<array/>
<key>PerspectiveWidths</key>
<array>
<integer>1668</integer>
<integer>1668</integer>
<integer>1508</integer>
<integer>1508</integer>
</array>
<key>Perspectives</key>
<array>
@ -230,6 +230,8 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@ -255,7 +257,7 @@
<dict>
<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
<array>
<real>290</real>
<real>337</real>
</array>
<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
<array>
@ -267,18 +269,19 @@
<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
<array>
<string>08FB7794FE84155DC02AAC07</string>
<string>ECED644710F9957A006B4DC9</string>
<string>ECED6B0E10F9A953006B4DC9</string>
<string>1C37FBAC04509CD000000102</string>
<string>ECF46DD311347FCD00390CBE</string>
<string>ECF46DD411347FCD00390CBE</string>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>30</integer>
<integer>25</integer>
<integer>0</integer>
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
<string>{{0, 0}, {290, 939}}</string>
<string>{{0, 0}, {337, 751}}</string>
</dict>
<key>PBXTopSmartGroupGIDs</key>
<array/>
@ -288,17 +291,19 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {307, 957}}</string>
<string>{{0, 0}, {354, 769}}</string>
<key>GroupTreeTableConfiguration</key>
<array>
<string>MainColumn</string>
<real>290</real>
<real>337</real>
</array>
<key>RubberWindowFrame</key>
<string>164 133 1508 810 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
<key>Proportion</key>
<string>307pt</string>
<string>354pt</string>
</dict>
<dict>
<key>Dock</key>
@ -309,7 +314,7 @@
<key>PBXProjectModuleGUID</key>
<string>ECED643E10F99551006B4DC9</string>
<key>PBXProjectModuleLabel</key>
<string>tsip_transac_nict.c</string>
<string>tinyipsec_config.h</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -317,176 +322,56 @@
<key>PBXProjectModuleGUID</key>
<string>ECED643F10F99551006B4DC9</string>
<key>PBXProjectModuleLabel</key>
<string>tsip_transac_nict.c</string>
<string>tinyipsec_config.h</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>ECE8D4D210FBD7D400B2464F</string>
<string>ECF46DD811347FCD00390CBE</string>
<key>history</key>
<array>
<string>ECED6B2310F9AAB1006B4DC9</string>
<string>ECED6B2410F9AAB1006B4DC9</string>
<string>ECED6B2510F9AAB1006B4DC9</string>
<string>ECED6B2810F9AAB1006B4DC9</string>
<string>ECED6B2910F9AAB1006B4DC9</string>
<string>ECED6B2A10F9AAB1006B4DC9</string>
<string>ECED6B2B10F9AAB1006B4DC9</string>
<string>ECED6B2D10F9AAB1006B4DC9</string>
<string>ECED6B3310F9AAB1006B4DC9</string>
<string>ECED6B3610F9AAB1006B4DC9</string>
<string>ECED6B3710F9AAB1006B4DC9</string>
<string>ECED6B3910F9AAB1006B4DC9</string>
<string>ECED6B3A10F9AAB1006B4DC9</string>
<string>ECED6B3C10F9AAB1006B4DC9</string>
<string>ECED6B3D10F9AAB1006B4DC9</string>
<string>ECED6B3F10F9AAB1006B4DC9</string>
<string>ECED6B9B10F9ABC2006B4DC9</string>
<string>ECED6BAC10F9ACCE006B4DC9</string>
<string>ECED6BAE10F9ACCE006B4DC9</string>
<string>ECED6BB010F9ACCE006B4DC9</string>
<string>EC02B10A10FA4E8C0055FBF1</string>
<string>EC02B10B10FA4E8C0055FBF1</string>
<string>EC02B10C10FA4E8C0055FBF1</string>
<string>EC02B10D10FA4E8C0055FBF1</string>
<string>EC02B10F10FA4E8C0055FBF1</string>
<string>EC02B11010FA4E8C0055FBF1</string>
<string>EC02B11410FA4E8C0055FBF1</string>
<string>EC02B11510FA4E8C0055FBF1</string>
<string>EC02B11710FA4E8C0055FBF1</string>
<string>EC02B11910FA4E8C0055FBF1</string>
<string>EC02B11B10FA4E8C0055FBF1</string>
<string>EC02B11C10FA4E8C0055FBF1</string>
<string>EC02B11D10FA4E8C0055FBF1</string>
<string>EC02B11E10FA4E8C0055FBF1</string>
<string>EC02B11F10FA4E8C0055FBF1</string>
<string>EC02B12010FA4E8C0055FBF1</string>
<string>EC02B12110FA4E8C0055FBF1</string>
<string>EC02B12310FA4E8C0055FBF1</string>
<string>EC02B15E10FA4EFA0055FBF1</string>
<string>EC02B17310FA4FF50055FBF1</string>
<string>EC02B23710FA51B70055FBF1</string>
<string>EC02B23810FA51B70055FBF1</string>
<string>EC02B24D10FA51E70055FBF1</string>
<string>EC02B26F10FA537D0055FBF1</string>
<string>EC02B28210FA54470055FBF1</string>
<string>EC02B29310FA55620055FBF1</string>
<string>EC02B29C10FA55820055FBF1</string>
<string>EC02B2C010FA56AF0055FBF1</string>
<string>EC02B2F710FA59110055FBF1</string>
<string>EC02B32810FA5D210055FBF1</string>
<string>EC02B32910FA5D210055FBF1</string>
<string>EC02B32A10FA5D210055FBF1</string>
<string>EC02B32E10FA5D210055FBF1</string>
<string>EC02B33010FA5D210055FBF1</string>
<string>EC02B3A410FA626E0055FBF1</string>
<string>EC02B3B410FA632B0055FBF1</string>
<string>EC02B3C810FA64040055FBF1</string>
<string>EC02B3D910FA645F0055FBF1</string>
<string>EC02B3F810FA65230055FBF1</string>
<string>EC02B42110FA66EB0055FBF1</string>
<string>EC02B42F10FA673D0055FBF1</string>
<string>EC02B43D10FA69BE0055FBF1</string>
<string>EC02B43F10FA69BE0055FBF1</string>
<string>EC02B47610FA6FC50055FBF1</string>
<string>EC02B47710FA6FC50055FBF1</string>
<string>EC02B47C10FA6FC50055FBF1</string>
<string>EC02B47D10FA6FC50055FBF1</string>
<string>EC02B4A710FA6FFC0055FBF1</string>
<string>EC02B4CD10FA71110055FBF1</string>
<string>ECE8D4C010FBD76500B2464F</string>
<string>ECE8D4C110FBD76500B2464F</string>
<string>ECE8D4C210FBD76500B2464F</string>
<string>ECE8D4C310FBD76500B2464F</string>
<string>ECE8D4C410FBD76500B2464F</string>
<string>ECE8D4C510FBD76500B2464F</string>
<string>ECF46D7B11347A2A00390CBE</string>
<string>ECF46D7C11347A2A00390CBE</string>
<string>ECF46D7D11347A2A00390CBE</string>
<string>ECF46D7E11347A2A00390CBE</string>
<string>ECF46D7F11347A2A00390CBE</string>
<string>ECF46D8011347A2A00390CBE</string>
<string>ECF46D8111347A2A00390CBE</string>
<string>ECF46D9F11347C1200390CBE</string>
<string>ECF46DA011347C1200390CBE</string>
<string>ECF46DA111347C1200390CBE</string>
<string>ECF46DA211347C1200390CBE</string>
<string>ECF46DA311347C1200390CBE</string>
<string>ECF46DA411347C1200390CBE</string>
<string>ECF46DD511347FCD00390CBE</string>
<string>ECF46DD611347FCD00390CBE</string>
</array>
<key>prevStack</key>
<array>
<string>ECED6B4310F9AAB1006B4DC9</string>
<string>ECED6B4410F9AAB1006B4DC9</string>
<string>ECED6B4510F9AAB1006B4DC9</string>
<string>ECED6B4610F9AAB1006B4DC9</string>
<string>ECED6B4710F9AAB1006B4DC9</string>
<string>ECED6B4810F9AAB1006B4DC9</string>
<string>ECED6B4A10F9AAB1006B4DC9</string>
<string>ECED6B4C10F9AAB1006B4DC9</string>
<string>ECED6B4D10F9AAB1006B4DC9</string>
<string>ECED6B4E10F9AAB1006B4DC9</string>
<string>ECED6B4F10F9AAB1006B4DC9</string>
<string>ECED6B5010F9AAB1006B4DC9</string>
<string>ECED6B5210F9AAB1006B4DC9</string>
<string>ECED6B6610F9AAB1006B4DC9</string>
<string>ECED6B6710F9AAB1006B4DC9</string>
<string>ECED6B6810F9AAB1006B4DC9</string>
<string>ECED6B6C10F9AAB1006B4DC9</string>
<string>ECED6B6D10F9AAB1006B4DC9</string>
<string>ECED6B7110F9AAB1006B4DC9</string>
<string>ECED6B7210F9AAB1006B4DC9</string>
<string>ECED6B7310F9AAB1006B4DC9</string>
<string>ECED6B7410F9AAB1006B4DC9</string>
<string>ECED6B7510F9AAB1006B4DC9</string>
<string>ECED6B7710F9AAB1006B4DC9</string>
<string>ECED6B8E10F9AB24006B4DC9</string>
<string>ECED6B9D10F9ABC2006B4DC9</string>
<string>ECED6B9E10F9ABC2006B4DC9</string>
<string>ECED6B9F10F9ABC2006B4DC9</string>
<string>ECED6BA010F9ABC2006B4DC9</string>
<string>ECED6BA410F9ABC2006B4DC9</string>
<string>ECED6BB410F9ACCE006B4DC9</string>
<string>ECED6BB510F9ACCE006B4DC9</string>
<string>ECED6BB710F9ACCE006B4DC9</string>
<string>ECED6BB910F9ACCE006B4DC9</string>
<string>EC02B12610FA4E8C0055FBF1</string>
<string>EC02B12710FA4E8C0055FBF1</string>
<string>EC02B12810FA4E8C0055FBF1</string>
<string>EC02B12B10FA4E8C0055FBF1</string>
<string>EC02B12C10FA4E8C0055FBF1</string>
<string>EC02B13010FA4E8C0055FBF1</string>
<string>EC02B13110FA4E8C0055FBF1</string>
<string>EC02B13610FA4E8C0055FBF1</string>
<string>EC02B13D10FA4E8C0055FBF1</string>
<string>EC02B13F10FA4E8C0055FBF1</string>
<string>EC02B14610FA4E8C0055FBF1</string>
<string>EC02B14910FA4E8C0055FBF1</string>
<string>EC02B14A10FA4E8C0055FBF1</string>
<string>EC02B15010FA4E8C0055FBF1</string>
<string>EC02B15110FA4E8C0055FBF1</string>
<string>EC02B15210FA4E8C0055FBF1</string>
<string>EC02B15310FA4E8C0055FBF1</string>
<string>EC02B17E10FA4FF50055FBF1</string>
<string>EC02B18310FA4FF50055FBF1</string>
<string>EC02B26010FA532E0055FBF1</string>
<string>EC02B27210FA537D0055FBF1</string>
<string>EC02B28510FA54470055FBF1</string>
<string>EC02B29610FA55620055FBF1</string>
<string>EC02B29F10FA55820055FBF1</string>
<string>EC02B2BA10FA569B0055FBF1</string>
<string>EC02B2D210FA570D0055FBF1</string>
<string>EC02B31410FA5A940055FBF1</string>
<string>EC02B33410FA5D210055FBF1</string>
<string>EC02B33510FA5D210055FBF1</string>
<string>EC02B34610FA5D210055FBF1</string>
<string>EC02B34B10FA5D210055FBF1</string>
<string>EC02B35310FA5D210055FBF1</string>
<string>EC02B3D610FA64430055FBF1</string>
<string>EC02B44510FA69BE0055FBF1</string>
<string>EC02B44610FA69BE0055FBF1</string>
<string>EC02B48610FA6FC50055FBF1</string>
<string>EC02B48710FA6FC50055FBF1</string>
<string>EC02B48A10FA6FC50055FBF1</string>
<string>EC02B48D10FA6FC50055FBF1</string>
<string>EC02B49E10FA6FC50055FBF1</string>
<string>ECE8D4C610FBD76500B2464F</string>
<string>ECE8D4C710FBD76500B2464F</string>
<string>ECE8D4C810FBD76500B2464F</string>
<string>ECE8D4C910FBD76500B2464F</string>
<string>ECE8D4CA10FBD76500B2464F</string>
<string>ECE8D4CB10FBD76500B2464F</string>
<string>ECE8D4CC10FBD76500B2464F</string>
<string>ECE8D4CD10FBD76500B2464F</string>
<string>ECE8D4CE10FBD76500B2464F</string>
<string>ECE8D4CF10FBD76500B2464F</string>
<string>ECE8D4D010FBD76500B2464F</string>
<string>ECF46D8411347A2A00390CBE</string>
<string>ECF46D8511347A2A00390CBE</string>
<string>ECF46D8611347A2A00390CBE</string>
<string>ECF46D8711347A2A00390CBE</string>
<string>ECF46D8811347A2A00390CBE</string>
<string>ECF46D8911347A2A00390CBE</string>
<string>ECF46D8A11347A2A00390CBE</string>
<string>ECF46D8B11347A2A00390CBE</string>
<string>ECF46D8C11347A2A00390CBE</string>
<string>ECF46D8D11347A2A00390CBE</string>
<string>ECF46D8E11347A2A00390CBE</string>
<string>ECF46D8F11347A2A00390CBE</string>
<string>ECF46D9011347A2A00390CBE</string>
<string>ECF46D9111347A2A00390CBE</string>
<string>ECF46D9211347A2A00390CBE</string>
<string>ECF46D9311347A2A00390CBE</string>
<string>ECF46DA611347C1200390CBE</string>
<string>ECF46DA711347C1200390CBE</string>
<string>ECF46DA811347C1200390CBE</string>
<string>ECF46DA911347C1200390CBE</string>
<string>ECF46DAA11347C1200390CBE</string>
<string>ECF46DAB11347C1200390CBE</string>
<string>ECF46DAC11347C1200390CBE</string>
<string>ECF46DAD11347C1200390CBE</string>
<string>ECF46DD711347FCD00390CBE</string>
</array>
</dict>
<key>SplitCount</key>
@ -500,16 +385,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {1356, 785}}</string>
<string>{{0, 0}, {1149, 526}}</string>
<key>RubberWindowFrame</key>
<string>164 133 1508 810 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>785pt</string>
<string>526pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>167pt</string>
<string>238pt</string>
<key>Tabs</key>
<array>
<dict>
@ -523,7 +410,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {1356, 140}}</string>
<string>{{10, 27}, {1149, 211}}</string>
<key>RubberWindowFrame</key>
<string>164 133 1508 810 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -577,7 +466,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {1356, 140}}</string>
<string>{{10, 27}, {1149, 211}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -586,7 +475,7 @@
</dict>
</array>
<key>Proportion</key>
<string>1356pt</string>
<string>1149pt</string>
</dict>
</array>
<key>Name</key>
@ -605,11 +494,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>ECE8D4D310FBD7D400B2464F</string>
<string>ECF46A0111346DE700390CBE</string>
<string>1CA23ED40692098700951B8B</string>
<string>ECE8D4D410FBD7D400B2464F</string>
<string>ECF46A0211346DE700390CBE</string>
<string>ECED643E10F99551006B4DC9</string>
<string>ECE8D4D510FBD7D400B2464F</string>
<string>ECF46A0311346DE700390CBE</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -648,8 +537,6 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@ -660,14 +547,12 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {1668, 342}}</string>
<key>RubberWindowFrame</key>
<string>365 180 1668 998 0 0 1920 1178 </string>
<string>{{0, 0}, {1508, 154}}</string>
</dict>
<key>Module</key>
<string>PBXDebugCLIModule</string>
<key>Proportion</key>
<string>342pt</string>
<string>154pt</string>
</dict>
<dict>
<key>ContentConfiguration</key>
@ -686,8 +571,8 @@
<string>yes</string>
<key>sizes</key>
<array>
<string>{{0, 0}, {814, 295}}</string>
<string>{{814, 0}, {854, 295}}</string>
<string>{{0, 0}, {736, 296}}</string>
<string>{{736, 0}, {772, 296}}</string>
</array>
</dict>
<key>VerticalSplitView</key>
@ -702,8 +587,8 @@
<string>yes</string>
<key>sizes</key>
<array>
<string>{{0, 0}, {1668, 295}}</string>
<string>{{0, 295}, {1668, 315}}</string>
<string>{{0, 0}, {1508, 296}}</string>
<string>{{0, 296}, {1508, 314}}</string>
</array>
</dict>
</dict>
@ -723,7 +608,7 @@
<key>DebugSTDIOWindowFrame</key>
<string>{{200, 200}, {500, 300}}</string>
<key>Frame</key>
<string>{{0, 347}, {1668, 610}}</string>
<string>{{0, 159}, {1508, 610}}</string>
<key>PBXDebugSessionStackFrameViewKey</key>
<dict>
<key>DebugVariablesTableConfiguration</key>
@ -733,15 +618,11 @@
<string>Value</string>
<real>85</real>
<string>Summary</string>
<real>624</real>
<real>542</real>
</array>
<key>Frame</key>
<string>{{814, 0}, {854, 295}}</string>
<key>RubberWindowFrame</key>
<string>365 180 1668 998 0 0 1920 1178 </string>
<string>{{736, 0}, {772, 296}}</string>
</dict>
<key>RubberWindowFrame</key>
<string>365 180 1668 998 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXDebugSessionModule</string>
@ -764,14 +645,14 @@
</array>
<key>TableOfContents</key>
<array>
<string>ECE8D4D610FBD7D400B2464F</string>
<string>ECF46A0411346DE700390CBE</string>
<string>1CCC7628064C1048000F2A68</string>
<string>1CCC7629064C1048000F2A68</string>
<string>ECE8D4D710FBD7D400B2464F</string>
<string>ECE8D4D810FBD7D400B2464F</string>
<string>ECE8D4D910FBD7D400B2464F</string>
<string>ECE8D4DA10FBD7D400B2464F</string>
<string>ECED643E10F99551006B4DC9</string>
<string>ECF46A0511346DE700390CBE</string>
<string>ECF46A0611346DE700390CBE</string>
<string>ECF46A0711346DE700390CBE</string>
<string>ECF46A0811346DE700390CBE</string>
<string>ECF4691811346BB900390CBE</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
@ -801,12 +682,10 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>ECE8D4DB10FBD7D400B2464F</string>
<string>ECE8D4DC10FBD7D400B2464F</string>
<string>/Users/diopmamadou/Documents/doubango/xcode/tinySIP/tinySIP.xcodeproj</string>
</array>
<key>WindowString</key>
<string>365 180 1668 998 0 0 1920 1178 </string>
<string>164 133 1508 810 0 0 1920 1178 </string>
<key>WindowToolsV3</key>
<array>
<dict>

File diff suppressed because it is too large Load Diff