Port all projects to Mac OSx - Complete implementing polling functions.

This commit is contained in:
bossiel 2010-01-10 20:38:43 +00:00
parent 06485d64ad
commit b2c4da85bd
57 changed files with 19877 additions and 10526 deletions

View File

@ -1,261 +1,261 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file thttp_auth.c /**@file thttp_auth.c
* @brief HTTP basic/digest authetication (RFC 2617) implementations. * @brief HTTP basic/digest authetication (RFC 2617) implementations.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include "tinyHTTP/auth/thttp_auth.h" #include "tinyHTTP/auth/thttp_auth.h"
#include "tsk_string.h" #include "tsk_string.h"
#include "tsk_base64.h" #include "tsk_base64.h"
#include "tsk_buffer.h" #include "tsk_buffer.h"
#include "tsk_memory.h" #include "tsk_memory.h"
#include <string.h> #include <string.h>
/** /**
* @fn size_t thttp_auth_basic_response(const char* userid, const char* password, * @fn size_t thttp_auth_basic_response(const char* userid, const char* password,
* char** response) * char** response)
* *
* @brief Generates HTTP-basic response as per RFC 2617. * @brief Generates HTTP-basic response as per RFC 2617.
* *
* @author Mamadou * @author Mamadou
* @date 12/30/2009 * @date 12/30/2009
* *
* @param [in,out] userid The user-id. * @param [in,out] userid The user-id.
* @param [in,out] password The user-password. * @param [in,out] password The user-password.
* @param [in,out] response A pointer to the response. It will be up to the caller to free the newly allocated buffer. * @param [in,out] response A pointer to the response. It will be up to the caller to free the newly allocated buffer.
* *
* @return The size of the response. * @return The size of the response.
**/ **/
size_t thttp_auth_basic_response(const char* userid, const char* password, char** response) size_t thttp_auth_basic_response(const char* userid, const char* password, char** response)
{ {
size_t ret; size_t ret;
/* RFC 2617 - 2 Basic Authentication Scheme /* RFC 2617 - 2 Basic Authentication Scheme
To receive authorization, the client sends the userid and password, To receive authorization, the client sends the userid and password,
separated by a single colon (":") character, within a base64 [7] separated by a single colon (":") character, within a base64 [7]
encoded string in the credentials. encoded string in the credentials.
*/ */
char *res = 0; char *res = 0;
tsk_sprintf(&res, "%s:%s", userid, password); tsk_sprintf(&res, "%s:%s", userid, password);
ret = tsk_base64_encode(res, strlen(res), response); ret = tsk_base64_encode((const uint8_t*)res, strlen(res), response);
TSK_FREE(res); TSK_FREE(res);
return ret; return ret;
} }
/** /**
* @fn size_t thttp_auth_digest_HA1(const char* username, const char* realm, const char* password, char** ha1) * @fn size_t thttp_auth_digest_HA1(const char* username, const char* realm, const char* password, char** ha1)
* *
* @brief Generates digest HA1 value as per RFC 2617 subclause 3.2.2.2. * @brief Generates digest HA1 value as per RFC 2617 subclause 3.2.2.2.
* *
* @author Mamadou * @author Mamadou
* @date 12/30/2009 * @date 12/30/2009
* *
* @param [in,out] username The user's name (unquoted) in the specified @ref realm. * @param [in,out] username The user's name (unquoted) in the specified @ref realm.
* @param [in,out] realm The realm. (unquoted) * @param [in,out] realm The realm. (unquoted)
* @param [in,out] password The user's password. * @param [in,out] password The user's password.
* @param [in,out] ha1 A pointer to the result. * @param [in,out] ha1 A pointer to the result.
* *
* @return Zero if succeed and non-zero error code otherwise. * @return Zero if succeed and non-zero error code otherwise.
**/ **/
int thttp_auth_digest_HA1(const char* username, const char* realm, const char* password, tsk_md5string_t* ha1) int thttp_auth_digest_HA1(const char* username, const char* realm, const char* password, tsk_md5string_t* ha1)
{ {
int ret; int ret;
/* RFC 2617 - 3.2.2.2 A1 /* RFC 2617 - 3.2.2.2 A1
A1 = unq(username-value) ":" unq(realm-value) ":" passwd A1 = unq(username-value) ":" unq(realm-value) ":" passwd
*/ */
char *a1 = 0; char *a1 = 0;
tsk_sprintf(&a1, "%s:%s:%s", username, realm, password); tsk_sprintf(&a1, "%s:%s:%s", username, realm, password);
ret = tsk_md5compute(a1, strlen(a1), ha1); ret = tsk_md5compute(a1, strlen(a1), ha1);
TSK_FREE(a1); TSK_FREE(a1);
return ret; return ret;
} }
/** /**
* @fn size_t thttp_auth_digest_HA1sess(const char* username, const char* realm, * @fn size_t thttp_auth_digest_HA1sess(const char* username, const char* realm,
* const char* password, const char* nonce, const char* cnonce, tsk_md5string_t ha1sess) * const char* password, const char* nonce, const char* cnonce, tsk_md5string_t ha1sess)
* *
* @brief Generates digest HA1 value for 'MD5-sess' algo as per RFC 2617 subclause 3.2.2.2. * @brief Generates digest HA1 value for 'MD5-sess' algo as per RFC 2617 subclause 3.2.2.2.
* *
* @author Mamadou * @author Mamadou
* @date 12/30/2009 * @date 12/30/2009
* *
* @param [in,out] username The user's name (unquoted) in the specified @ref realm. * @param [in,out] username The user's name (unquoted) in the specified @ref realm.
* @param [in,out] realm The realm (unquoted). * @param [in,out] realm The realm (unquoted).
* @param [in,out] password The user's password. * @param [in,out] password The user's password.
* @param [in,out] nonce The nonce (unquoted). * @param [in,out] nonce The nonce (unquoted).
* @param [in,out] cnonce The client nonce (unquoted). * @param [in,out] cnonce The client nonce (unquoted).
* @param [in,out] ha1sess A pointer to the result. * @param [in,out] ha1sess A pointer to the result.
* *
* @return Zero if succeed and non-zero error code otherwise. * @return Zero if succeed and non-zero error code otherwise.
**/ **/
int thttp_auth_digest_HA1sess(const char* username, const char* realm, const char* password, const char* nonce, const char* cnonce, tsk_md5string_t* ha1sess) int thttp_auth_digest_HA1sess(const char* username, const char* realm, const char* password, const char* nonce, const char* cnonce, tsk_md5string_t* ha1sess)
{ {
int ret; int ret;
/* RFC 2617 - 3.2.2.2 A1 /* RFC 2617 - 3.2.2.2 A1
A1 = H( unq(username-value) ":" unq(realm-value) A1 = H( unq(username-value) ":" unq(realm-value)
":" passwd ) ":" passwd )
":" unq(nonce-value) ":" unq(cnonce-value) ":" unq(nonce-value) ":" unq(cnonce-value)
*/ */
char *a1sess = 0; char *a1sess = 0;
tsk_sprintf(&a1sess, "%s:%s:%s:%s:%s", username, realm, password, nonce, cnonce); tsk_sprintf(&a1sess, "%s:%s:%s:%s:%s", username, realm, password, nonce, cnonce);
ret = tsk_md5compute(a1sess, strlen(a1sess), ha1sess); ret = tsk_md5compute(a1sess, strlen(a1sess), ha1sess);
TSK_FREE(a1sess); TSK_FREE(a1sess);
return ret; return ret;
} }
/** /**
* @fn int thttp_auth_digest_HA2(const char* method, const char* uri, const char* entity_body, * @fn int thttp_auth_digest_HA2(const char* method, const char* uri, const char* entity_body,
* const char* qop, tsk_md5string_t* ha2) * const char* qop, tsk_md5string_t* ha2)
* *
* @brief Generates digest HA2 value as per RFC 2617 subclause 3.2.2.3. * @brief Generates digest HA2 value as per RFC 2617 subclause 3.2.2.3.
* *
* @author Mamadou * @author Mamadou
* @date 12/30/2009 * @date 12/30/2009
* *
* @param [in,out] method The HTTP/SIP method name. * @param [in,out] method The HTTP/SIP method name.
* @param [in,out] uri The HTTP URL or SIP URI of the request. * @param [in,out] uri The HTTP URL or SIP URI of the request.
* @param [in,out] entity_body The entity body. * @param [in,out] entity_body The entity body.
* @param [in,out] qop The Quality Of Protection. * @param [in,out] qop The Quality Of Protection.
* @param [in,out] ha2 A pointer to the response. * @param [in,out] ha2 A pointer to the response.
* *
* @return Zero if succeed and non-zero error code otherwise. * @return Zero if succeed and non-zero error code otherwise.
**/ **/
int thttp_auth_digest_HA2(const char* method, const char* uri, const char* entity_body, const char* qop, tsk_md5string_t* ha2) int thttp_auth_digest_HA2(const char* method, const char* uri, const char* entity_body, const char* qop, tsk_md5string_t* ha2)
{ {
int ret; int ret;
/* RFC 2617 - 3.2.2.3 A2 /* RFC 2617 - 3.2.2.3 A2
If the "qop" directive's value is "auth" or is unspecified, then A2 If the "qop" directive's value is "auth" or is unspecified, then A2
is: is:
A2 = Method ":" digest-uri-value A2 = Method ":" digest-uri-value
If the "qop" value is "auth-int", then A2 is: If the "qop" value is "auth-int", then A2 is:
A2 = Method ":" digest-uri-value ":" H(entity-body) A2 = Method ":" digest-uri-value ":" H(entity-body)
*/ */
char *a2 = 0; char *a2 = 0;
if(!qop || tsk_strempty(qop) || tsk_striequals(qop, "auth")) if(!qop || tsk_strempty(qop) || tsk_striequals(qop, "auth"))
{ {
tsk_sprintf(&a2, "%s:%s", method, uri); tsk_sprintf(&a2, "%s:%s", method, uri);
} }
else if(tsk_striequals(qop, "auth-int")) else if(tsk_striequals(qop, "auth-int"))
{ {
if(entity_body) if(entity_body)
{ {
tsk_md5string_t hEntity; tsk_md5string_t hEntity;
if((ret = tsk_md5compute(entity_body, strlen(entity_body), &hEntity))) if((ret = tsk_md5compute(entity_body, strlen(entity_body), &hEntity)))
{ {
goto bail; goto bail;
} }
tsk_sprintf(&a2, "%s:%s:%s", method, uri, hEntity); tsk_sprintf(&a2, "%s:%s:%s", method, uri, hEntity);
} }
else else
{ {
tsk_sprintf(&a2, "%s:%s:%s", method, uri, TSK_MD5_EMPTY); tsk_sprintf(&a2, "%s:%s:%s", method, uri, TSK_MD5_EMPTY);
} }
} }
ret = tsk_md5compute(a2, strlen(a2), ha2); ret = tsk_md5compute(a2, strlen(a2), ha2);
bail: bail:
TSK_FREE(a2); TSK_FREE(a2);
return ret; return ret;
} }
/** /**
* @fn int thttp_auth_digest_response(const tsk_md5string_t *ha1, const char* nonce, * @fn int thttp_auth_digest_response(const tsk_md5string_t *ha1, const char* nonce,
* const nonce_count_t noncecount, const char* cnonce, const char* qop, const tsk_md5string_t* ha2, * const nonce_count_t noncecount, const char* cnonce, const char* qop, const tsk_md5string_t* ha2,
* tsk_md5string_t* response) * tsk_md5string_t* response)
* *
* @brief Generates HTTP digest response as per RFC 2617 subclause 3.2.2.1. * @brief Generates HTTP digest response as per RFC 2617 subclause 3.2.2.1.
* *
* @author Mamadou * @author Mamadou
* @date 12/31/2009 * @date 12/31/2009
* *
* @param [in,out] ha1 HA1 string generated using @ref thttp_auth_digest_HA1 or @ref thttp_auth_digest_HA1sess. * @param [in,out] ha1 HA1 string generated using @ref thttp_auth_digest_HA1 or @ref thttp_auth_digest_HA1sess.
* @param [in,out] nonce The nonce value. * @param [in,out] nonce The nonce value.
* @param [in,out] noncecount The nonce count. * @param [in,out] noncecount The nonce count.
* @param [in,out] cnonce The client nounce (unquoted). * @param [in,out] cnonce The client nounce (unquoted).
* @param [in,out] qop The Quality Of Protection (unquoted). * @param [in,out] qop The Quality Of Protection (unquoted).
* @param [in,out] ha2 HA2 string generated using @ref thttp_auth_digest_HA2. * @param [in,out] ha2 HA2 string generated using @ref thttp_auth_digest_HA2.
* @param [in,out] response A pointer to the response. * @param [in,out] response A pointer to the response.
* *
* @return Zero if succeed and non-zero error code otherwise. * @return Zero if succeed and non-zero error code otherwise.
**/ **/
int thttp_auth_digest_response(const tsk_md5string_t *ha1, const char* nonce, const nonce_count_t noncecount, const char* cnonce, int thttp_auth_digest_response(const tsk_md5string_t *ha1, const char* nonce, const nonce_count_t noncecount, const char* cnonce,
const char* qop, const tsk_md5string_t* ha2, tsk_md5string_t* response) const char* qop, const tsk_md5string_t* ha2, tsk_md5string_t* response)
{ {
int ret; int ret;
/* RFC 2617 3.2.2.1 Request-Digest /* RFC 2617 3.2.2.1 Request-Digest
============ CASE 1 ============ ============ CASE 1 ============
If the "qop" value is "auth" or "auth-int": If the "qop" value is "auth" or "auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value) request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value ":" nc-value
":" unq(cnonce-value) ":" unq(cnonce-value)
":" unq(qop-value) ":" unq(qop-value)
":" H(A2) ":" H(A2)
) <"> ) <">
============ CASE 2 ============ ============ CASE 2 ============
If the "qop" directive is not present (this construction is for If the "qop" directive is not present (this construction is for
compatibility with RFC 2069): compatibility with RFC 2069):
request-digest = request-digest =
<"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) >
<"> <">
*/ */
char *res = 0; char *res = 0;
if(tsk_striequals(qop, "auth") || tsk_striequals(qop, "auth-int")) if(tsk_striequals(qop, "auth") || tsk_striequals(qop, "auth-int"))
{ {
/* CASE 1 */ /* CASE 1 */
tsk_sprintf(&res, "%s:%s:%s:%s:%s:%s", *ha1, nonce, noncecount, cnonce, qop, *ha2); tsk_sprintf(&res, "%s:%s:%s:%s:%s:%s", *ha1, nonce, noncecount, cnonce, qop, *ha2);
} }
else else
{ {
/* CASE 2 */ /* CASE 2 */
tsk_sprintf(&res, "%s:%s:%s", *ha1, nonce, *ha2); tsk_sprintf(&res, "%s:%s:%s", *ha1, nonce, *ha2);
} }
ret = tsk_md5compute(res, strlen(res), response); ret = tsk_md5compute(res, strlen(res), response);
TSK_FREE(res); TSK_FREE(res);
return ret; return ret;
} }

View File

@ -35,6 +35,7 @@
#include "tsk_string.h" #include "tsk_string.h"
#include "tsk_debug.h" #include "tsk_debug.h"
#include <string.h>
/** /**
* @fn int tnet_socket_close(const tnet_socket_t *socket) * @fn int tnet_socket_close(const tnet_socket_t *socket)

View File

@ -32,18 +32,19 @@
#include "tsk_string.h" #include "tsk_string.h"
#include "tsk_debug.h" #include "tsk_debug.h"
#include "tsk_thread.h" #include "tsk_thread.h"
#include "tsk_buffer.h"
#if TNET_USE_POLL #if TNET_USE_POLL
#include "tnet_poll.h" #include "tnet_poll.h"
#include <unistd.h>
#define TNET_MAX_FDS 64 #define TNET_MAX_FDS 64
/*== Socket description ==*/ /*== Socket description ==*/
typedef struct transport_socket_s typedef struct transport_socket_s
{ {
char *buffer;
size_t bufsize;
tnet_fd_t fd; tnet_fd_t fd;
unsigned connected:1; unsigned connected:1;
} }
@ -234,7 +235,30 @@ bail:
return numberOfBytesSent; return numberOfBytesSent;
} }
int tnet_transport_has_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)
{
TSK_DEBUG_ERROR("Invalid server handle.");
return 0;
}
context = (transport_context_t*)transport->context;
for(i=0; i<context->count; i++)
{
if(context->sockets[i]->fd == fd)
{
return 1;
}
}
return 0;
}
/*== Add new socket ==*/ /*== Add new socket ==*/
void transport_socket_add(tnet_fd_t fd, transport_context_t *context) void transport_socket_add(tnet_fd_t fd, transport_context_t *context)
@ -266,19 +290,49 @@ static void transport_socket_set_connected(tnet_fd_t fd, transport_context_t *co
/*== Remove socket ==*/ /*== Remove socket ==*/
void transport_socket_remove(int index, transport_context_t *context) void transport_socket_remove(int index, transport_context_t *context)
{ {
int i;
if(index < (int)context->count)
{
tnet_sockfd_close(&(context->sockets[index]->fd));
TSK_FREE(context->sockets[index]);
for(i=index ; i<context->count-1; i++)
{
context->sockets[i] = context->sockets[i+1];
}
context->sockets[context->count-1] = 0;
context->count--;
}
} }
int tnet_transport_stop(tnet_transport_t *transport) int tnet_transport_stop(tnet_transport_t *transport)
{ {
int ret; int ret;
transport_context_t *context;
char c = '\0';
if(ret = tsk_runnable_stop(TSK_RUNNABLE(transport))) if(!transport)
{
return -1;
}
context = transport->context;
if((ret = tsk_runnable_stop(TSK_RUNNABLE(transport))))
{ {
return ret; return ret;
} }
//signal(...); if(context)
{
// signal using pipe[1]
write(context->sockets[1]->fd, &c, 1);
}
return tsk_thread_join(transport->mainThreadId); return tsk_thread_join(transport->mainThreadId);
} }
@ -289,6 +343,7 @@ void *tnet_transport_mainthread(void *param)
{ {
tnet_transport_t *transport = param; tnet_transport_t *transport = param;
transport_context_t *context; transport_context_t *context;
tnet_fd_t pipes[2];
int ret; int ret;
size_t i; size_t i;
@ -307,6 +362,15 @@ void *tnet_transport_mainthread(void *param)
goto bail; goto bail;
} }
} }
/* Create and add pipes to the fd_set */
if((ret = pipe(pipes)))
{
TNET_PRINT_LAST_ERROR();
goto bail;
}
transport_socket_add(pipes[0], context);
transport_socket_add(pipes[1], context);
/* Add the current transport socket to the context. */ /* Add the current transport socket to the context. */
transport_socket_add(transport->master->fd, context); transport_socket_add(transport->master->fd, context);
@ -316,15 +380,16 @@ void *tnet_transport_mainthread(void *param)
TSK_DEBUG_INFO("Starting [%s] server with IP {%s} on port {%d}...", transport->description, transport->master->ip, transport->master->port); TSK_DEBUG_INFO("Starting [%s] server with IP {%s} on port {%d}...", transport->description, transport->master->ip, transport->master->port);
while(transport->running) while(TSK_RUNNABLE(transport)->running)
{ {
if((ret = tnet_poll(context->ufds, context->count, -1)) < 0) if((ret = tnet_poll(context->ufds, context->count, -1)) < 0)
{ {
TNET_PRINT_LAST_ERROR(); TNET_PRINT_LAST_ERROR();
goto bail; goto bail;
} }
if(!transport->running) if(!TSK_RUNNABLE(transport)->running)
{ {
goto bail; goto bail;
} }
@ -342,21 +407,28 @@ void *tnet_transport_mainthread(void *param)
/*================== POLLIN ==================*/ /*================== POLLIN ==================*/
if(context->ufds[i].revents & TNET_POLLIN) if(context->ufds[i].revents & TNET_POLLIN)
{ {
int readCount; size_t len = 0;
void* buffer = 0;
TSK_DEBUG_INFO("NETWORK EVENT FOR SERVER [%s] -- TNET_POLLIN", transport->description); TSK_DEBUG_INFO("NETWORK EVENT FOR SERVER [%s] -- TNET_POLLIN", transport->description);
/* Create socket's internal buffer. */ /* Retrieve the amount of pending data */
if(!active_socket->buffer) if(tnet_ioctlt(active_socket->fd, FIONREAD, &len) < 0)
{ {
// FIXME: see win32 function TSK_DEBUG_ERROR("IOCTLT FAILED.");
size_t max_buffer_size = TNET_SOCKET_TYPE_IS_DGRAM(transport->master->type) ? DGRAM_MAX_SIZE : STREAM_MAX_SIZE; TNET_PRINT_LAST_ERROR();
active_socket->buffer = tsk_calloc(max_buffer_size, sizeof(char)); continue;
active_socket->bufsize = max_buffer_size; }
if(!(buffer = tsk_calloc(len, sizeof(uint8_t))))
{
TSK_DEBUG_ERROR("TSK_CALLOC FAILED.");
continue;
} }
/* Receive the waiting data. */ /* Receive the waiting data. */
if((readCount = recv(active_socket->fd, active_socket->buffer, active_socket->bufsize, 0)) < 0) if(recv(active_socket->fd, buffer, len, 0) < 0)
{ {
TSK_FREE(buffer);
//if(tnet_geterrno() == TNET_ERROR_WOULDBLOCK) //if(tnet_geterrno() == TNET_ERROR_WOULDBLOCK)
{ {
//TSK_DEBUG_INFO("WSAEWOULDBLOCK error for READ operation"); //TSK_DEBUG_INFO("WSAEWOULDBLOCK error for READ operation");
@ -370,7 +442,14 @@ void *tnet_transport_mainthread(void *param)
} }
else else
{ {
TSK_RUNNABLE_ENQUEUE(TSK_RUNNABLE(transport), active_socket->buffer, readCount); tsk_buffer_t *BUFFER = TSK_BUFFER_CREATE_NULL();
BUFFER->data = buffer;
BUFFER->size = len;
//printf("====\n\n%s\n\n====", buffer);
TSK_RUNNABLE_ENQUEUE_OBJECT(TSK_RUNNABLE(transport), BUFFER);
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,81 +1,83 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tnet_types.h /**@file tnet_types.h
* @brief ????. * @brief ????.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#ifndef TNET_TYPES_H #ifndef TNET_TYPES_H
#define TNET_TYPES_H #define TNET_TYPES_H
#include "tinyNET_config.h" #include "tinyNET_config.h"
#if TNET_UNDER_WINDOWS #if TNET_UNDER_WINDOWS
# include <winsock2.h> # include <winsock2.h>
# include <ws2tcpip.h> # include <ws2tcpip.h>
#else #else
# include <sys/types.h> # include <sys/types.h>
# include <sys/socket.h> # include <sys/socket.h>
# include <sys/select.h> # include <sys/select.h>
# include <netinet/in.h> # include <netinet/in.h>
# include <arpa/inet.h> # include <arpa/inet.h>
# include <netdb.h> # include <netdb.h>
# include <fcntl.h> # include <fcntl.h>
# if TNET_HAVE_POLL # include <sys/ioctl.h>
# include <poll.h> # include <unistd.h>
# endif /* TNET_HAVE_POLL */ # if TNET_HAVE_POLL
#endif # include <poll.h>
# endif /* TNET_HAVE_POLL */
#include "tsk_errno.h" #endif
TNET_BEGIN_DECLS #include "tsk_errno.h"
typedef int32_t tnet_fd_t; TNET_BEGIN_DECLS
typedef uint16_t tnet_port_t;
typedef char tnet_host_t[NI_MAXHOST]; typedef int32_t tnet_fd_t;
typedef char tnet_ip_t[INET6_ADDRSTRLEN]; typedef uint16_t tnet_port_t;
typedef char tnet_host_t[NI_MAXHOST];
typedef char tnet_ip_t[INET6_ADDRSTRLEN];
#if TNET_UNDER_WINDOWS
# define TNET_INVALID_SOCKET INVALID_SOCKET
# define TNET_ERROR_WOULDBLOCK WSAEWOULDBLOCK #if TNET_UNDER_WINDOWS
# define TNET_ERROR_INPROGRESS WSAEINPROGRESS # define TNET_INVALID_SOCKET INVALID_SOCKET
#else # define TNET_ERROR_WOULDBLOCK WSAEWOULDBLOCK
# define TNET_INVALID_SOCKET -1 # define TNET_ERROR_INPROGRESS WSAEINPROGRESS
# define TNET_ERROR_WOULDBLOCK EWOULDBLOCK #else
# define TNET_ERROR_INPROGRESS EINPROGRESS # define TNET_INVALID_SOCKET -1
#endif # define TNET_ERROR_WOULDBLOCK EWOULDBLOCK
#define TNET_INVALID_FD TNET_INVALID_SOCKET # define TNET_ERROR_INPROGRESS EINPROGRESS
#endif
#ifdef _WIN32_WCE #define TNET_INVALID_FD TNET_INVALID_SOCKET
typedef TCHAR tnet_error_t[512];
#else #ifdef _WIN32_WCE
typedef char tnet_error_t[512]; typedef TCHAR tnet_error_t[512];
#endif #else
typedef char tnet_error_t[512];
TNET_END_DECLS #endif
#endif /* TNET_TYPES_H */ TNET_END_DECLS
#endif /* TNET_TYPES_H */

View File

@ -35,8 +35,8 @@
#define RUN_TEST_LOOP 1 #define RUN_TEST_LOOP 1
#define RUN_TEST_ALL 0 #define RUN_TEST_ALL 0
#define RUN_TEST_SOCKETS 1 #define RUN_TEST_SOCKETS 0
#define RUN_TEST_TRANSPORT 0 #define RUN_TEST_TRANSPORT 1
#define RUN_TEST_AUTH 0 #define RUN_TEST_AUTH 0
#ifdef _WIN32_WCE #ifdef _WIN32_WCE

View File

@ -31,7 +31,7 @@
"CSeq: 201 REGISTER\r\n" \ "CSeq: 201 REGISTER\r\n" \
"Max-Forwards: 70\r\n" \ "Max-Forwards: 70\r\n" \
"Contact: <sip:mamadou@%s:%d;transport=%s>\r\n" \ "Contact: <sip:mamadou@%s:%d;transport=%s>\r\n" \
"Expires: 20000\r\n" \ "Expires: 10\r\n" \
"\r\n" "\r\n"
@ -113,7 +113,11 @@ int test_transport_udp_ipv4(tnet_transport_handle_t *transport)
return -1; return -1;
} }
//tsk_thread_sleep(2000);
while(!tnet_transport_isready(transport))
{
tsk_thread_sleep(500);
}
/* Connect to our SIP REGISTRAR */ /* Connect to our SIP REGISTRAR */
if((fd = tnet_transport_connectto(transport, REMOTE_IPV4, 5060)) == TNET_INVALID_FD) if((fd = tnet_transport_connectto(transport, REMOTE_IPV4, 5060)) == TNET_INVALID_FD)
@ -162,7 +166,8 @@ void test_transport()
test_transport_tcp_ipv4(tcp); test_transport_tcp_ipv4(tcp);
#endif #endif
tsk_thread_sleep(2000000); getchar();
//tsk_thread_sleep(2000);
#if TEST_UDP #if TEST_UDP
TNET_TRANSPORT_SAFE_FREE(udp); TNET_TRANSPORT_SAFE_FREE(udp);

View File

@ -31,6 +31,7 @@
#include "tsk_memory.h" #include "tsk_memory.h"
#include <stdio.h> #include <stdio.h>
#include <string.h>
#if defined(_MSC_VER) || TSK_UNDER_WINDOWS #if defined(_MSC_VER) || TSK_UNDER_WINDOWS
# define vsnprintf _vsnprintf # define vsnprintf _vsnprintf

View File

@ -35,10 +35,11 @@
TSK_BEGIN_DECLS TSK_BEGIN_DECLS
#define TSK_DECLARE_SAFEOBJ\ //#define TSK_DECLARE_SAFEOBJ\
union{ \ // union{ \
tsk_mutex_handle_t *mutex; \ // tsk_mutex_handle_t *mutex; \
} // }
#define TSK_DECLARE_SAFEOBJ tsk_mutex_handle_t *mutex
#define TSK_SAFEOBJ_MUTEX(safeobj) ((safeobj)->mutex) #define TSK_SAFEOBJ_MUTEX(safeobj) ((safeobj)->mutex)

View File

@ -134,7 +134,7 @@ int tsk_timer_manager_isready(tsk_timer_manager_handle_t *self)
return 0; return 0;
} }
#if defined(DEBUG) || defined(_DEBUG) #if defined(DEBUG) || defined(_DEBUG) || !defined(NDEBUG)
void tsk_timer_manager_debug(tsk_timer_manager_handle_t *self) void tsk_timer_manager_debug(tsk_timer_manager_handle_t *self)
{ {
tsk_timer_manager_t *manager = self; tsk_timer_manager_t *manager = self;
@ -188,8 +188,9 @@ tsk_timer_id_t tsk_timer_manager_schedule(tsk_timer_manager_handle_t *self, uint
timer_id = timer->id; timer_id = timer->id;
tsk_mutex_lock(manager->mutex); tsk_mutex_lock(manager->mutex);
tsk_list_push_ascending_data(manager->timers, ((void**) &timer)); tsk_list_push_ascending_data(manager->timers, ((void**) &timer));
//tsk_timer_manager_debug(self);
tsk_mutex_unlock(manager->mutex); tsk_mutex_unlock(manager->mutex);
tsk_timer_manager_debug(self);
tsk_condwait_signal(manager->condwait); tsk_condwait_signal(manager->condwait);
tsk_semaphore_increment(manager->sem); tsk_semaphore_increment(manager->sem);
@ -263,7 +264,7 @@ static void *__tsk_timer_manager_mainthread(void *param)
uint64_t epoch; uint64_t epoch;
tsk_timer_manager_t *manager = param; tsk_timer_manager_t *manager = param;
//TSK_DEBUG_INFO("TIMER MANAGER -- START"); TSK_DEBUG_INFO("TIMER MANAGER -- START");
manager->active = 1; manager->active = 1;
while(TSK_RUNNABLE(manager)->running) while(TSK_RUNNABLE(manager)->running)
@ -280,7 +281,7 @@ peek_first:
curr = TSK_TIMER_GET_FIRST(); curr = TSK_TIMER_GET_FIRST();
tsk_mutex_unlock(manager->mutex); tsk_mutex_unlock(manager->mutex);
if(!curr->canceled) if(curr && !curr->canceled)
{ {
epoch = tsk_time_epoch(); epoch = tsk_time_epoch();
if(epoch >= curr->timeout) if(epoch >= curr->timeout)
@ -304,7 +305,7 @@ peek_first:
} }
} }
} }
else else if(curr)
{ {
tsk_mutex_lock(manager->mutex); tsk_mutex_lock(manager->mutex);
tsk_list_remove_item_by_data(manager->timers, curr); tsk_list_remove_item_by_data(manager->timers, curr);
@ -313,7 +314,7 @@ peek_first:
} }
manager->active = 0; manager->active = 0;
//TSK_DEBUG_INFO("TIMER MANAGER -- STOP"); TSK_DEBUG_INFO("TIMER MANAGER -- STOP");
return 0; return 0;
} }

View File

@ -33,7 +33,7 @@
#define LOOP 1 #define LOOP 1
#define RUN_TEST_ALL 0 #define RUN_TEST_ALL 1
#define RUN_TEST_LISTS 0 #define RUN_TEST_LISTS 0
#define RUN_TEST_HEAP 0 #define RUN_TEST_HEAP 0
#define RUN_TEST_STRINGS 0 #define RUN_TEST_STRINGS 0
@ -49,7 +49,7 @@
#define RUN_TEST_BUFFER 0 #define RUN_TEST_BUFFER 0
#define RUN_TEST_MD5 0 #define RUN_TEST_MD5 0
#define RUN_TEST_SHA1 0 #define RUN_TEST_SHA1 0
#define RUN_TEST_BASE64 1 #define RUN_TEST_BASE64 0
#if RUN_TEST_LISTS || RUN_TEST_ALL #if RUN_TEST_LISTS || RUN_TEST_ALL
#include "test_lists.h" #include "test_lists.h"
@ -80,7 +80,7 @@
#endif #endif
#if RUN_TEST_SAFEOBJECT || RUN_TEST_ALL #if RUN_TEST_SAFEOBJECT || RUN_TEST_ALL
#include "test_safeobject.h" //#include "test_safeobject.h"
#endif #endif
#if RUN_TEST_OBJECT || RUN_TEST_ALL #if RUN_TEST_OBJECT || RUN_TEST_ALL
@ -179,7 +179,7 @@ int main()
#if RUN_TEST_SAFEOBJECT || RUN_TEST_ALL #if RUN_TEST_SAFEOBJECT || RUN_TEST_ALL
/* safe object */ /* safe object */
test_safeobject(); //test_safeobject();
printf("\n\n"); printf("\n\n");
#endif #endif

View File

@ -132,7 +132,7 @@ uint8_t* tcomp_buffer_getBufferAtPos(const tcomp_buffer_handle_t* handle, size_t
* Gets the internal buffer size * Gets the internal buffer size
* @retval The size of the internal buffer * @retval The size of the internal buffer
*/ */
const size_t tcomp_buffer_getSize(const tcomp_buffer_handle_t* handle) /*const*/ size_t tcomp_buffer_getSize(const tcomp_buffer_handle_t* handle) /*const*/
{ {
if(handle) if(handle)
{ {
@ -147,7 +147,7 @@ const size_t tcomp_buffer_getSize(const tcomp_buffer_handle_t* handle) /*const*/
* Gets the remainning bits. * Gets the remainning bits.
* @param handle The handle for which to get the remaining bits. * @param handle The handle for which to get the remaining bits.
*/ */
const size_t tcomp_buffer_getRemainingBits(const tcomp_buffer_handle_t* handle) /*const*/ size_t tcomp_buffer_getRemainingBits(const tcomp_buffer_handle_t* handle) /*const*/
{ {
if(handle) if(handle)
{ {

View File

@ -58,8 +58,8 @@ const uint8_t* tcomp_buffer_getReadOnlyBufferAtPos(const tcomp_buffer_handle_t*
TINYSIGCOMP_API uint8_t* tcomp_buffer_getBufferAtPos(const tcomp_buffer_handle_t* handle, size_t position); TINYSIGCOMP_API uint8_t* tcomp_buffer_getBufferAtPos(const tcomp_buffer_handle_t* handle, size_t position);
#define tcomp_buffer_getBuffer(handle) tcomp_buffer_getBufferAtPos(handle, 0) #define tcomp_buffer_getBuffer(handle) tcomp_buffer_getBufferAtPos(handle, 0)
TINYSIGCOMP_API const size_t tcomp_buffer_getSize(const tcomp_buffer_handle_t* handle) /*const*/; TINYSIGCOMP_API size_t tcomp_buffer_getSize(const tcomp_buffer_handle_t* handle) /*const*/;
const size_t tcomp_buffer_getRemainingBits(const tcomp_buffer_handle_t* handle) /*const*/; size_t tcomp_buffer_getRemainingBits(const tcomp_buffer_handle_t* handle) /*const*/;
uint8_t* tcomp_buffer_readBytes(tcomp_buffer_handle_t* handle, size_t size); uint8_t* tcomp_buffer_readBytes(tcomp_buffer_handle_t* handle, size_t size);
uint16_t tcomp_buffer_readLsbToMsb(tcomp_buffer_handle_t* handle, size_t length); uint16_t tcomp_buffer_readLsbToMsb(tcomp_buffer_handle_t* handle, size_t length);

View File

@ -462,7 +462,11 @@ static void* tcomp_compartment_create(void * self, va_list * app)
if(compartment) if(compartment)
{ {
uint64_t id = va_arg(*app, uint64_t); uint64_t id = va_arg(*app, uint64_t);
#if defined (__GNUC__)
uint16_t sigCompParameters = (uint16_t)va_arg(*app, unsigned);
#else
uint16_t sigCompParameters = va_arg(*app, uint16_t); uint16_t sigCompParameters = va_arg(*app, uint16_t);
#endif
/* Initialize safeobject */ /* Initialize safeobject */
tsk_safeobj_init(compartment); tsk_safeobj_init(compartment);

View File

@ -32,6 +32,8 @@
#include "tsk_debug.h" #include "tsk_debug.h"
#include <string.h>
#define TCOMP_MIN(a, b) (a < b ? a : b) #define TCOMP_MIN(a, b) (a < b ? a : b)
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -31,6 +31,8 @@
#include "tcomp_compressor_dummy.h" #include "tcomp_compressor_dummy.h"
#include "tcomp_buffer.h" #include "tcomp_buffer.h"
#include <string.h>
#define UNCOMPRESSED_BYTECODE_LENGTH 13 #define UNCOMPRESSED_BYTECODE_LENGTH 13
#define UNCOMPRESSED_BYTECODE_DESTINATION_CODE 0x01 /* 128 */ #define UNCOMPRESSED_BYTECODE_DESTINATION_CODE 0x01 /* 128 */
#define DUMMYCOMPRESSOR_UNCOMPRESSED_BYTECODE \ #define DUMMYCOMPRESSOR_UNCOMPRESSED_BYTECODE \

View File

@ -35,6 +35,8 @@
#include "tsk_memory.h" #include "tsk_memory.h"
#include "tsk_debug.h" #include "tsk_debug.h"
#include <string.h>
/**@defgroup tcomp_compressordisp_group SIGCOMP decompressor dispatcher. /**@defgroup tcomp_compressordisp_group SIGCOMP decompressor dispatcher.
* Entity that receives application messages, invokes a compressor,and forwards the resulting SigComp compressed messages to a remote * Entity that receives application messages, invokes a compressor,and forwards the resulting SigComp compressed messages to a remote
* endpoint. * endpoint.
@ -136,7 +138,7 @@ int tcomp_compressordisp_compress(tcomp_compressordisp_t *dispatcher, uint64_t c
tsk_sha1reset(&sha); tsk_sha1reset(&sha);
tsk_sha1input(&sha, (const uint8_t*)output_ptr, *output_size); tsk_sha1input(&sha, (const uint8_t*)output_ptr, *output_size);
tsk_sha1result(&sha, nackId); tsk_sha1result(&sha, (char*)nackId);
tcomp_compartment_addNack(lpCompartment, nackId); tcomp_compartment_addNack(lpCompartment, nackId);
} }

View File

@ -34,6 +34,7 @@
#include "tsk_debug.h" #include "tsk_debug.h"
#include <assert.h> #include <assert.h>
#include <string.h>
#define TCOMP_MAX_STREAM_BUFFER_SIZE 65535 #define TCOMP_MAX_STREAM_BUFFER_SIZE 65535
#define TCOMP_NACK_SUPPORTED(dispatcher) (dispatcher->stateHandler->sigcomp_parameters->SigComp_version >= 0x02) #define TCOMP_NACK_SUPPORTED(dispatcher) (dispatcher->stateHandler->sigcomp_parameters->SigComp_version >= 0x02)

View File

@ -32,6 +32,7 @@
#include "tsk_binaryutils.h" #include "tsk_binaryutils.h"
#include "tsk_debug.h" #include "tsk_debug.h"
#include <string.h>
/* /*
|<----------------------------DMS--------------------------------->| |<----------------------------DMS--------------------------------->|

View File

@ -34,6 +34,8 @@
#include "tsk_binaryutils.h" #include "tsk_binaryutils.h"
#include "tsk_sha1.h" #include "tsk_sha1.h"
#include <string.h>
/**@defgroup tcomp_message_group SigComp Message. /**@defgroup tcomp_message_group SigComp Message.
* A message sent from the compressor dispatcher to the decompressordispatcher. In case of a message-based transport such as UDP, a * A message sent from the compressor dispatcher to the decompressordispatcher. In case of a message-based transport such as UDP, a
* SigComp message corresponds to exactly one datagram. For a stream-based transport such as TCP, the SigComp messages are * SigComp message corresponds to exactly one datagram. For a stream-based transport such as TCP, the SigComp messages are

View File

@ -106,7 +106,7 @@ void tcomp_state_makeValid(tcomp_state_t* state)
tsk_sha1input(&sha, firstPart, 8); tsk_sha1input(&sha, firstPart, 8);
tsk_sha1input(&sha, tcomp_buffer_getBuffer(state->value), tcomp_buffer_getSize(state->value)); tsk_sha1input(&sha, tcomp_buffer_getBuffer(state->value), tcomp_buffer_getSize(state->value));
err = tsk_sha1result(&sha, tcomp_buffer_getBuffer(state->identifier)); err = tsk_sha1result(&sha, (char*)tcomp_buffer_getBuffer(state->identifier));
} }
/* unlock */ /* unlock */
@ -130,11 +130,19 @@ static void* tcomp_state_create(void * self, va_list * app)
tcomp_state_t *state = self; tcomp_state_t *state = self;
if(state) if(state)
{ {
#if defined(__GNUC__)
state->length = (uint16_t)va_arg(*app, unsigned);
state->address = (uint16_t)va_arg(*app, unsigned);
state->instruction = (uint16_t)va_arg(*app, unsigned);
state->minimum_access_length = (uint16_t)va_arg(*app, unsigned);
state->retention_priority = (uint16_t)va_arg(*app, unsigned);
#else
state->length = va_arg(*app, uint16_t); state->length = va_arg(*app, uint16_t);
state->address = va_arg(*app, uint16_t); state->address = va_arg(*app, uint16_t);
state->instruction = va_arg(*app, uint16_t); state->instruction = va_arg(*app, uint16_t);
state->minimum_access_length = va_arg(*app, uint16_t); state->minimum_access_length = va_arg(*app, uint16_t);
state->retention_priority = va_arg(*app, uint16_t); state->retention_priority = va_arg(*app, uint16_t);
#endif
state->value = TCOMP_BUFFER_CREATE(); state->value = TCOMP_BUFFER_CREATE();
state->identifier = TCOMP_BUFFER_CREATE(); state->identifier = TCOMP_BUFFER_CREATE();

View File

@ -33,6 +33,7 @@
#include "tsk_debug.h" #include "tsk_debug.h"
#include "tsk_ppfcs16.h" #include "tsk_ppfcs16.h"
#include <string.h> /* memcpy */
#include <stdlib.h> /* qsort */ #include <stdlib.h> /* qsort */
#include <math.h> /* ceil, log ... */ #include <math.h> /* ceil, log ... */
@ -650,7 +651,7 @@ int TCOMP_UDVM_EXEC_INST__SHA_1(tcomp_udvm_t *udvm, uint16_t position, uint16_t
goto bail; goto bail;
} }
if( (err = tsk_sha1result(&sha, Message_Digest)) ) if( (err = tsk_sha1result(&sha, (char*)Message_Digest)) )
{ {
ok = 0; ok = 0;
tcomp_udvm_createNackInfo2(udvm, NACK_INTERNAL_ERROR); tcomp_udvm_createNackInfo2(udvm, NACK_INTERNAL_ERROR);
@ -1413,7 +1414,7 @@ int TCOMP_UDVM_EXEC_INST__INPUT_BITS(tcomp_udvm_t *udvm, uint16_t length, uint16
* Decompression failure occurs if this operand (length) does not lie between 0 * Decompression failure occurs if this operand (length) does not lie between 0
* and 16 inclusive. * and 16 inclusive.
*/ */
if(length<0 || length>16) if(/*length<0 ||*/ length>16)
{ {
tcomp_udvm_createNackInfo2(udvm, NACK_INVALID_OPERAND); tcomp_udvm_createNackInfo2(udvm, NACK_INVALID_OPERAND);
return 0; return 0;

View File

@ -92,7 +92,7 @@ void tcomp_udvm_createNackInfo(tcomp_udvm_t *udvm, uint8_t reasonCode, tcomp_buf
*/ */
tsk_sha1reset(&sha); tsk_sha1reset(&sha);
tsk_sha1input(&sha, udvm->sigCompMessage->startPtr, udvm->sigCompMessage->totalSize); tsk_sha1input(&sha, udvm->sigCompMessage->startPtr, udvm->sigCompMessage->totalSize);
tsk_sha1result(&sha, (nackbuffer_ptr + NACK_SHA1_INDEX)); tsk_sha1result(&sha, (char*)(nackbuffer_ptr + NACK_SHA1_INDEX));
/* /*
* Details * Details

View File

@ -1,37 +1,39 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
#ifndef TEST_TINYSIGCOMP_STDAFX_H #ifndef TEST_TINYSIGCOMP_STDAFX_H
#define TEST_TINYSIGCOMP_STDAFX_H #define TEST_TINYSIGCOMP_STDAFX_H
#include "targetver.h" #include "targetver.h"
#include <stdio.h> #include <stdio.h>
#include <tchar.h> #if (defined(_WIN32) || defined(WIN32) || defined(_WIN32_WCE)) && !defined(__SYMBIAN32__)
# include <tchar.h>
#include <string.h> #endif
#include <string.h>
//#define TINYSAK_IMPORTS
//#define TINYSIGCOMP_IMPORTS
//#define TINYSAK_IMPORTS
//#define TINYSIGCOMP_IMPORTS
#endif /* TEST_TINYSIGCOMP_STDAFX_H */ #endif /* TEST_TINYSIGCOMP_STDAFX_H */

File diff suppressed because it is too large Load Diff

View File

@ -41,6 +41,7 @@
#include "tsk_object.h" #include "tsk_object.h"
#include "tsk_list.h" #include "tsk_list.h"
#include "tsk_md5.h"
TSIP_BEGIN_DECLS TSIP_BEGIN_DECLS

View File

@ -168,7 +168,7 @@ typedef tsk_list_t tsip_headers_L_t; /**< List of @ref tsip_header_t elements. *
================================*/ ================================*/
TINYSIP_API const char *tsip_header_get_name(tsip_header_type_t type); TINYSIP_API const char *tsip_header_get_name(tsip_header_type_t type);
TINYSIP_API const char tsip_header_get_param_separator(const tsip_header_t *self); TINYSIP_API char tsip_header_get_param_separator(const tsip_header_t *self);
TINYSIP_API int tsip_header_tostring(const tsip_header_t *self, tsk_buffer_t *output); TINYSIP_API int tsip_header_tostring(const tsip_header_t *self, tsk_buffer_t *output);
#define TSIP_HEADER_HAS_PARAM(self, name) tsk_params_has_param(self ? TSIP_HEADER(self)->params : 0, name) #define TSIP_HEADER_HAS_PARAM(self, name) tsk_params_has_param(self ? TSIP_HEADER(self)->params : 0, name)

View File

@ -33,6 +33,8 @@
#include "tinysip_config.h" #include "tinysip_config.h"
#include "tsk_params.h" #include "tsk_params.h"
#include <string.h>
TSIP_BEGIN_DECLS TSIP_BEGIN_DECLS
#define SCANNER_SET_STRING(string) \ #define SCANNER_SET_STRING(string) \

View File

@ -1,251 +1,256 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_message.h /**@file tsip_message.h
* @brief Represents a SIP message. A SIP message is either a request from a client to a server, or a * @brief Represents a SIP message. A SIP message is either a request from a client to a server, or a
* response from a server to a client. See RFC 3261 suc-bclause 7. * response from a server to a client. See RFC 3261 suc-bclause 7.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#ifndef TSIP_MESSAGE_H #ifndef TSIP_MESSAGE_H
#define TSIP_MESSAGE_H #define TSIP_MESSAGE_H
#include "tinysip_config.h" #include "tinysip_config.h"
#include "tinysip/headers/tsip_header_Call_ID.h" #include "tinysip/headers/tsip_header_Call_ID.h"
#include "tinysip/headers/tsip_header_Contact.h" #include "tinysip/headers/tsip_header_Contact.h"
#include "tinysip/headers/tsip_header_Content_Length.h" #include "tinysip/headers/tsip_header_Content_Length.h"
#include "tinysip/headers/tsip_header_Content_Type.h" #include "tinysip/headers/tsip_header_Content_Type.h"
#include "tinysip/headers/tsip_header_CSeq.h" #include "tinysip/headers/tsip_header_CSeq.h"
#include "tinysip/headers/tsip_header_Expires.h" #include "tinysip/headers/tsip_header_Expires.h"
#include "tinysip/headers/tsip_header_From.h" #include "tinysip/headers/tsip_header_From.h"
#include "tinysip/headers/tsip_header_P_Access_Network_Info.h" #include "tinysip/headers/tsip_header_P_Access_Network_Info.h"
#include "tinysip/headers/tsip_header_To.h" #include "tinysip/headers/tsip_header_To.h"
#include "tinysip/headers/tsip_header_Via.h" #include "tinysip/headers/tsip_header_Via.h"
#include "tnet_types.h" #include "tnet_types.h"
#include "tsk_object.h" #include "tsk_object.h"
#include "tsk_buffer.h" #include "tsk_buffer.h"
TSIP_BEGIN_DECLS TSIP_BEGIN_DECLS
#define TSIP_MESSAGE_VERSION_10 "SIP/1.0" #define TSIP_MESSAGE_VERSION_10 "SIP/1.0"
#define TSIP_MESSAGE_VERSION_20 "SIP/2.0" #define TSIP_MESSAGE_VERSION_20 "SIP/2.0"
#define TSIP_MESSAGE_VERSION_DEFAULT TSIP_MESSAGE_VERSION_20 #define TSIP_MESSAGE_VERSION_DEFAULT TSIP_MESSAGE_VERSION_20
#define TSIP_MESSAGE_IS_REQUEST(self) ((self) ? (self)->type == tsip_request : 0) #define TSIP_MESSAGE_IS_REQUEST(self) ((self) ? (self)->type == tsip_request : 0)
#define TSIP_MESSAGE_IS_RESPONSE(self) ((self) ? (self)->type == tsip_response : 0) #define TSIP_MESSAGE_IS_RESPONSE(self) ((self) ? (self)->type == tsip_response : 0)
#define TSIP_MESSAGE(self) ((tsip_message_t*)(self)) #define TSIP_MESSAGE(self) ((tsip_message_t*)(self))
#define TSIP_MESSAGE_AS_RESPONSE(self) ((tsip_response_t*)(self)) #define TSIP_MESSAGE_AS_RESPONSE(self) ((tsip_response_t*)(self))
#define TSIP_MESSAGE_AS_REQUEST(self) ((tsip_request_t*)(self)) #define TSIP_MESSAGE_AS_REQUEST(self) ((tsip_request_t*)(self))
/**@def TSIP_MESSAGE_CREATE /**@def TSIP_MESSAGE_CREATE
* Creates new sip messgae. Could be either a request or a response. * Creates new sip messgae. Could be either a request or a response.
* You must call @ref TSIP_MESSAGE_SAFE_FREE to free the message. * You must call @ref TSIP_MESSAGE_SAFE_FREE to free the message.
* @sa TSIP_MESSAGE_SAFE_FREE. * @sa TSIP_MESSAGE_SAFE_FREE.
*/ */
/**@def TSIP_MESSAGE_SAFE_FREE /**@def TSIP_MESSAGE_SAFE_FREE
* Safely free a sip messgae previously created using TSIP_MESSAGE_CREATE. * Safely free a sip messgae previously created using TSIP_MESSAGE_CREATE.
* @sa TSIP_MESSAGE_CREATE. * @sa TSIP_MESSAGE_CREATE.
*/ */
#define TSIP_MESSAGE_CREATE() tsk_object_new(tsip_message_def_t, (tsip_message_type_t)tsip_unknown) #define TSIP_MESSAGE_CREATE() tsk_object_new(tsip_message_def_t, (tsip_message_type_t)tsip_unknown)
#define TSIP_REQUEST_CREATE(method, uri) tsk_object_new(tsip_message_def_t, (tsip_message_type_t)tsip_request, (const char*)method, (const tsip_uri_t*)uri) #define TSIP_REQUEST_CREATE(method, uri) tsk_object_new(tsip_message_def_t, (tsip_message_type_t)tsip_request, (const char*)method, (const tsip_uri_t*)uri)
#define TSIP_RESPONSE_CREATE(request, status_code, reason_phrase) tsk_object_new(tsip_message_def_t, (tsip_message_type_t)tsip_response, (const tsip_request_t*)request, (short)status_code, (const char*)reason_phrase) #define TSIP_RESPONSE_CREATE(request, status_code, reason_phrase) tsk_object_new(tsip_message_def_t, (tsip_message_type_t)tsip_response, (const tsip_request_t*)request, (short)status_code, (const char*)reason_phrase)
#define TSIP_MESSAGE_SAFE_FREE(self) tsk_object_unref(self), self = 0 #define TSIP_MESSAGE_SAFE_FREE(self) tsk_object_unref(self), self = 0
#define TSIP_REQUEST_SAFE_FREE(self) TSIP_MESSAGE_SAFE_FREE(self) #define TSIP_REQUEST_SAFE_FREE(self) TSIP_MESSAGE_SAFE_FREE(self)
#define TSIP_RESPONSE_SAFE_FREE(self) TSIP_MESSAGE_SAFE_FREE(self) #define TSIP_RESPONSE_SAFE_FREE(self) TSIP_MESSAGE_SAFE_FREE(self)
#define TSIP_RESPONSE_CODE(self) ((self)->line_status.status_code) #define TSIP_RESPONSE_CODE(self) ((self)->line_status.status_code)
#define TSIP_RESPONSE_PHRASE(self) ((self)->line_status.reason_phrase) #define TSIP_RESPONSE_PHRASE(self) ((self)->line_status.reason_phrase)
#define TSIP_REQUEST_METHOD(self) ((self)->line_request.method) #define TSIP_REQUEST_METHOD(self) ((self)->line_request.method)
#define TSIP_REQUEST_URI(self) ((self)->line_request.uri) #define TSIP_REQUEST_URI(self) ((self)->line_request.uri)
#define TSIP_MESSAGE_CONTENT_LENGTH(message) (uint32_t)(((message) && (message)->Content_Length) ? (message)->Content_Length->length : 0) #define TSIP_MESSAGE_CONTENT_LENGTH(message) (uint32_t)(((message) && (message)->Content_Length) ? (message)->Content_Length->length : 0)
#define TSIP_MESSAGE_CONTENT(message) (TSIP_MESSAGE_HAS_CONTENT(message) ? (message)->Content : 0) #define TSIP_MESSAGE_CONTENT(message) (TSIP_MESSAGE_HAS_CONTENT(message) ? (message)->Content : 0)
#define TSIP_MESSAGE_HAS_CONTENT(message) ((message) && (message)->Content) #define TSIP_MESSAGE_HAS_CONTENT(message) ((message) && (message)->Content)
#define TSIP_RESPONSE_IS(self, code) (TSIP_RESPONSE_CODE((self)) == code) #define TSIP_RESPONSE_IS(self, code) (TSIP_RESPONSE_CODE((self)) == code)
#define TSIP_RESPONSE_IS_NXX(self, N) (##N##00<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= ##N##99) #define TSIP_RESPONSE_IS_NXX(self, N) (N##00<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= N##99)
#define TSIP_RESPONSE_IS_1XX(self) TSIP_RESPONSE_IS_NXX(self, 1) #define TSIP_RESPONSE_IS_1XX(self) TSIP_RESPONSE_IS_NXX(self, 1)
#define TSIP_RESPONSE_IS_2XX(self) TSIP_RESPONSE_IS_NXX(self, 2) #define TSIP_RESPONSE_IS_2XX(self) TSIP_RESPONSE_IS_NXX(self, 2)
#define TSIP_RESPONSE_IS_3XX(self) TSIP_RESPONSE_IS_NXX(self, 3) #define TSIP_RESPONSE_IS_3XX(self) TSIP_RESPONSE_IS_NXX(self, 3)
#define TSIP_RESPONSE_IS_4XX(self) TSIP_RESPONSE_IS_NXX(self, 4) #define TSIP_RESPONSE_IS_4XX(self) TSIP_RESPONSE_IS_NXX(self, 4)
#define TSIP_RESPONSE_IS_5XX(self) TSIP_RESPONSE_IS_NXX(self, 5) #define TSIP_RESPONSE_IS_5XX(self) TSIP_RESPONSE_IS_NXX(self, 5)
#define TSIP_RESPONSE_IS_6XX(self) TSIP_RESPONSE_IS_NXX(self, 6) #define TSIP_RESPONSE_IS_6XX(self) TSIP_RESPONSE_IS_NXX(self, 6)
#define TSIP_RESPONSE_IS_23456(self) (200<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= 699) #define TSIP_RESPONSE_IS_23456(self) (200<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= 699)
/** /**
* @enum tsip_message_type_t * @enum tsip_message_type_t
* *
* @brief Defines the message type (Request or Response). * @brief Defines the message type (Request or Response).
**/ **/
typedef enum tsip_message_type_e typedef enum tsip_message_type_e
{ {
tsip_unknown, tsip_unknown,
tsip_request, tsip_request,
tsip_response tsip_response
} }
tsip_message_type_t; tsip_message_type_t;
/** /**
* @struct tsip_request_line_t * @struct tsip_request_line_t
* *
* @brief Defines SIP request header line. * @brief Defines SIP request header line.
* ABNF: Request-Line = Method SP Request-URI SP SIP-Version CRLF * ABNF: Request-Line = Method SP Request-URI SP SIP-Version CRLF
* Ref: RFC 3261 subclause 7.1. * Ref: RFC 3261 subclause 7.1.
* @sa tsip_status_line_t. * @sa tsip_status_line_t.
* *
* @author Mamadou * @author Mamadou
* @date 12/3/2009 * @date 12/3/2009
**/ **/
typedef struct tsip_request_line_s typedef struct tsip_request_line_s
{ {
char *method; /**< SIP method name. e.g REGISTER, ACK or INVITE.*/ char *method; /**< SIP method name. e.g REGISTER, ACK or INVITE.*/
tsip_uri_t *uri; /**< The Request-URI is a SIP or SIPS URI as described in Section 19.1 or a general URI (RFC 2396 [5]). It indicates tsip_uri_t *uri; /**< The Request-URI is a SIP or SIPS URI as described in Section 19.1 or a general URI (RFC 2396 [5]). It indicates
the user or service to which this request is being addressed. The Request-URI MUST NOT contain unescaped spaces or control the user or service to which this request is being addressed. The Request-URI MUST NOT contain unescaped spaces or control
characters and MUST NOT be enclosed in "<>". */ characters and MUST NOT be enclosed in "<>". */
} }
tsip_request_line_t; tsip_request_line_t;
/** /**
* @struct tsip_status_line_t * @struct tsip_status_line_t
* *
* @brief Defines SIP response status line. * @brief Defines SIP response status line.
* ABNF: Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF * ABNF: Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
* Ref: RFC 3261 subclause 7.2. * Ref: RFC 3261 subclause 7.2.
* @sa tsip_request_line_t. * @sa tsip_request_line_t.
* *
* @author Mamadou * @author Mamadou
* @date 12/3/2009 * @date 12/3/2009
**/ **/
typedef struct tsip_status_line_s typedef struct tsip_status_line_s
{ {
short status_code; /**< 3-digit integer result code that indicates the outcome of an attempt to understand and satisfy a request. */ short status_code; /**< 3-digit integer result code that indicates the outcome of an attempt to understand and satisfy a request. */
char *reason_phrase; /**< Textual description related to the status code. */ char *reason_phrase; /**< Textual description related to the status code. */
} }
tsip_status_line_t; tsip_status_line_t;
/** /**
* @struct tsip_message_t * @struct tsip_message_t
* *
* @brief Represents a SIP message. A SIP message is either a request from a client to a server, * @brief Represents a SIP message. A SIP message is either a request from a client to a server,
* or a response from a server to a client. See RFC 3261 suc-bclause 7. * or a response from a server to a client. See RFC 3261 suc-bclause 7.
* You must call @ref TSIP_MESSAGE_CREATE to create a sip message and TSIP_MESSAGE_SAFE_FREE to free the message. * You must call @ref TSIP_MESSAGE_CREATE to create a sip message and TSIP_MESSAGE_SAFE_FREE to free the message.
* *
* @author Mamadou * @author Mamadou
* @date 12/2/2009 * @date 12/2/2009
**/ **/
typedef struct tsip_message_s typedef struct tsip_message_s
{ {
TSK_DECLARE_OBJECT; TSK_DECLARE_OBJECT;
char *sip_version; /**< The SIP version. Only 'SIP/2.0' is supported. */ char *sip_version; /**< The SIP version. Only 'SIP/2.0' is supported. */
tsip_message_type_t type; /**< The type of this SIP message. */ tsip_message_type_t type; /**< The type of this SIP message. */
union // FIXME: http://docs.google.com/viewer?a=v&q=cache%3AE5v90Lcl5TkJ%3Awww.open-std.org%2FJTC1%2FSC22%2FWG14%2Fwww%2Fdocs%2Fn1406.pdf+anonymous+union+has+no+member&hl=en&sig=AHIEtbTdnPDnQLKpWQB9-nBYQg_BB4jIHQ&pli=1
{ #if !defined(__GNUC__)
tsip_request_line_t line_request; /**< Request status line. Only if message type is @ref tsip_request. */ union
tsip_status_line_t line_status; /**< Status line. Only if message type is @ref tsip_response. */ {
}; #endif
tsip_request_line_t line_request; /**< Request status line. Only if message type is @ref tsip_request. */
/*== MOST COMMON HEADERS. */ tsip_status_line_t line_status; /**< Status line. Only if message type is @ref tsip_response. */
tsip_header_Via_t *firstVia; /**< First Via header. */ #if !defined(__GNUC__)
tsip_header_From_t *From; };
tsip_header_To_t *To; #endif
tsip_header_Contact_t *Contact;
tsip_header_Call_ID_t *Call_ID; /*== MOST COMMON HEADERS. */
tsip_header_CSeq_t *CSeq; tsip_header_Via_t *firstVia; /**< First Via header. */
tsip_header_Expires_t *Expires; tsip_header_From_t *From;
tsip_header_To_t *To;
tsip_header_Content_Type_t *Content_Type; tsip_header_Contact_t *Contact;
tsip_header_Content_Length_t *Content_Length; tsip_header_Call_ID_t *Call_ID;
tsk_buffer_t *Content; tsip_header_CSeq_t *CSeq;
tsip_header_Expires_t *Expires;
/*== OTHER HEADERS*/
tsip_headers_L_t *headers; tsip_header_Content_Type_t *Content_Type;
tsip_header_Content_Length_t *Content_Length;
/*== */ tsk_buffer_t *Content;
tnet_fd_t sockfd;
} /*== OTHER HEADERS*/
tsip_message_t; tsip_headers_L_t *headers;
typedef tsip_message_t tsip_request_t; /**< SIP request message. */ /*== */
typedef tsip_message_t tsip_response_t; /**< SIP response message. */ tnet_fd_t sockfd;
}
tsip_message_t;
TINYSIP_API int tsip_message_add_header(tsip_message_t *self, const tsip_header_t *hdr);
TINYSIP_API int tsip_message_add_headers(tsip_message_t *self, const tsip_headers_L_t *headers); typedef tsip_message_t tsip_request_t; /**< SIP request message. */
typedef tsip_message_t tsip_response_t; /**< SIP response message. */
#if !defined(_MSC_VER) || defined(__GNUC__)
static void TSIP_MESSAGE_ADD_HEADER(tsip_message_t *self, ...)
{ TINYSIP_API int tsip_message_add_header(tsip_message_t *self, const tsip_header_t *hdr);
va_list ap; TINYSIP_API int tsip_message_add_headers(tsip_message_t *self, const tsip_headers_L_t *headers);
tsip_header_t *header;
const tsk_object_def_t *objdef; #if !defined(_MSC_VER) || defined(__GNUC__)
static void TSIP_MESSAGE_ADD_HEADER(tsip_message_t *self, ...)
va_start(ap, self); {
objdef = va_arg(ap, const tsk_object_def_t*); va_list ap;
header = tsk_object_new2(objdef, &ap); tsip_header_t *header;
va_end(ap); const tsk_object_def_t *objdef;
tsip_message_add_header(self, header); va_start(ap, self);
tsk_object_unref(header); objdef = va_arg(ap, const tsk_object_def_t*);
} header = tsk_object_new2(objdef, &ap);
#else va_end(ap);
#define TSIP_MESSAGE_ADD_HEADER(self, objdef, ...) \
{ \ tsip_message_add_header(self, header);
tsip_header_t *header = tsk_object_new(objdef, __VA_ARGS__); \ tsk_object_unref(header);
tsip_message_add_header(self, header); \ }
tsk_object_unref(header); \ #else
} #define TSIP_MESSAGE_ADD_HEADER(self, objdef, ...) \
#endif { \
tsip_header_t *header = tsk_object_new(objdef, __VA_ARGS__); \
TINYSIP_API const tsip_header_t *tsip_message_get_headerAt(const tsip_message_t *self, tsip_header_type_t type, size_t index); tsip_message_add_header(self, header); \
TINYSIP_API const tsip_header_t *tsip_message_get_header(const tsip_message_t *self, tsip_header_type_t type); tsk_object_unref(header); \
TINYSIP_API TSIP_BOOLEAN tsip_message_allowed(const tsip_message_t *self, const char* method); }
TINYSIP_API TSIP_BOOLEAN tsip_message_supported(const tsip_message_t *self, const char* option); #endif
TINYSIP_API TSIP_BOOLEAN tsip_message_required(const tsip_message_t *self, const char* option);
TINYSIP_API const tsip_header_t *tsip_message_get_headerAt(const tsip_message_t *self, tsip_header_type_t type, size_t index);
TINYSIP_API const tsip_header_t *tsip_message_get_header(const tsip_message_t *self, tsip_header_type_t type);
TINYSIP_API TSIP_BOOLEAN tsip_message_allowed(const tsip_message_t *self, const char* method);
TINYSIP_API int32_t tsip_message_getExpires(const tsip_message_t *message); TINYSIP_API TSIP_BOOLEAN tsip_message_supported(const tsip_message_t *self, const char* option);
TINYSIP_API uint32_t tsip_message_getContent_length(const tsip_message_t *message); TINYSIP_API TSIP_BOOLEAN tsip_message_required(const tsip_message_t *self, const char* option);
TINYSIP_API int32_t tsip_message_getCSeq(const tsip_message_t *message);
TINYSIP_API int tsip_message_tostring(const tsip_message_t *self, tsk_buffer_t *output);
TINYSIP_API int32_t tsip_message_getExpires(const tsip_message_t *message);
TINYSIP_API tsip_request_t *tsip_request_new(const char* method, const tsip_uri_t *request_uri, const tsip_uri_t *from, const tsip_uri_t *to, const char *call_id, int32_t cseq); TINYSIP_API uint32_t tsip_message_getContent_length(const tsip_message_t *message);
TINYSIP_API tsip_response_t *tsip_response_new(short status_code, const char* reason_phrase, const tsip_request_t *request); TINYSIP_API int32_t tsip_message_getCSeq(const tsip_message_t *message);
TINYSIP_GEXTERN const void *tsip_message_def_t; TINYSIP_API int tsip_message_tostring(const tsip_message_t *self, tsk_buffer_t *output);
TSIP_END_DECLS TINYSIP_API tsip_request_t *tsip_request_new(const char* method, const tsip_uri_t *request_uri, const tsip_uri_t *from, const tsip_uri_t *to, const char *call_id, int32_t cseq);
TINYSIP_API tsip_response_t *tsip_response_new(short status_code, const char* reason_phrase, const tsip_request_t *request);
#endif /* TSIP_MESSAGE_H */
TINYSIP_GEXTERN const void *tsip_message_def_t;
TSIP_END_DECLS
#endif /* TSIP_MESSAGE_H */

View File

@ -73,132 +73,132 @@ int tsip_challenge_update_cnonce(tsip_challenge_t *self)
//3GPP TS 35.205/6/7/8/9 and RFC 3310 //3GPP TS 35.205/6/7/8/9 and RFC 3310
int tsip_challenge_get_akares(const tsip_challenge_t *self, char const *password, char** result) int tsip_challenge_get_akares(const tsip_challenge_t *self, char const *password, char** result)
{ {
#define SQN_XOR_AK() (AUTN + 0) #define SQN_XOR_AK() (AUTN + 0)
#define SERVER_DATA() (nonce + AKA_RAND_SIZE + AKA_AUTN_SIZE) #define SERVER_DATA() (nonce + AKA_RAND_SIZE + AKA_AUTN_SIZE)
// § ==> XOR // § ==> XOR
// || ==> append // || ==> append
AKA_RES_T akares; AKA_RES_T akares;
int ret = -1; int ret = -1;
size_t n; size_t n;
char *nonce = 0; char *nonce = 0;
AKA_XXX_DELCLARE(RAND); AKA_XXX_DELCLARE(RAND);
AKA_XXX_DELCLARE(AK); AKA_XXX_DELCLARE(AK);
AKA_XXX_DELCLARE(AMF); AKA_XXX_DELCLARE(AMF);
AKA_XXX_DELCLARE(CK); AKA_XXX_DELCLARE(CK);
AKA_XXX_DELCLARE(IK); AKA_XXX_DELCLARE(IK);
AKA_XXX_DELCLARE(K); AKA_XXX_DELCLARE(K);
AKA_XXX_DELCLARE(SQN); AKA_XXX_DELCLARE(SQN);
AKA_XXX_DELCLARE(MAC_A); AKA_XXX_DELCLARE(MAC_A);
AKA_XXX_DELCLARE(AUTN); AKA_XXX_DELCLARE(AUTN);
AKA_XXX_BZERO(RAND); AKA_XXX_BZERO(RAND);
AKA_XXX_BZERO(AK); AKA_XXX_BZERO(AK);
AKA_XXX_BZERO(AMF); AKA_XXX_BZERO(AMF);
AKA_XXX_BZERO(CK); AKA_XXX_BZERO(CK);
AKA_XXX_BZERO(IK); AKA_XXX_BZERO(IK);
AKA_XXX_BZERO(K); AKA_XXX_BZERO(K);
AKA_XXX_BZERO(SQN); AKA_XXX_BZERO(SQN);
AKA_XXX_BZERO(MAC_A); AKA_XXX_BZERO(MAC_A);
AKA_XXX_BZERO(AUTN); AKA_XXX_BZERO(AUTN);
/* RFC 3310 subclause 3.2: nonce = base64(RAND || AUTN || SERV_DATA) /* RFC 3310 subclause 3.2: nonce = base64(RAND || AUTN || SERV_DATA)
*/ */
n = tsk_base64_decode(self->nonce, strlen(self->nonce), &nonce); n = tsk_base64_decode((const uint8_t*)self->nonce, strlen(self->nonce), &nonce);
if(n > TSK_MD5_STRING_SIZE) if(n > TSK_MD5_STRING_SIZE)
{ {
TSK_DEBUG_ERROR("The IMS CORE returned an invalid nonce."); TSK_DEBUG_ERROR("The IMS CORE returned an invalid nonce.");
goto bail; goto bail;
} }
if(n < AKA_RAND_SIZE + AKA_AUTN_SIZE) if(n < AKA_RAND_SIZE + AKA_AUTN_SIZE)
{ {
TSK_DEBUG_ERROR("The nonce returned by the IMS CORE is too short to contain both [RAND] and [AUTHN]"); TSK_DEBUG_ERROR("The nonce returned by the IMS CORE is too short to contain both [RAND] and [AUTHN]");
goto bail; goto bail;
} }
else else
{ {
/* Get RAND and AUTN /* Get RAND and AUTN
*/ */
memcpy(RAND, nonce, AKA_RAND_SIZE); memcpy(RAND, nonce, AKA_RAND_SIZE);
memcpy(AUTN, (nonce + AKA_RAND_SIZE), AKA_AUTN_SIZE); memcpy(AUTN, (nonce + AKA_RAND_SIZE), AKA_AUTN_SIZE);
} }
/* Secret key /* Secret key
*/ */
memcpy(K, password, (strlen(password) > AKA_K_SIZE ? AKA_K_SIZE : strlen(password))); memcpy(K, password, (strlen(password) > AKA_K_SIZE ? AKA_K_SIZE : strlen(password)));
/* 3GPP TS 35.205: AUTN = SQN[§AK] || AMF || MAC-A /* 3GPP TS 35.205: AUTN = SQN[§AK] || AMF || MAC-A
*/ */
memcpy(AMF, (AUTN + AKA_SQN_SIZE), AKA_AMF_SIZE); memcpy(AMF, (AUTN + AKA_SQN_SIZE), AKA_AMF_SIZE);
memcpy(MAC_A, (AUTN + AKA_SQN_SIZE + AKA_AMF_SIZE), AKA_MAC_A_SIZE); memcpy(MAC_A, (AUTN + AKA_SQN_SIZE + AKA_AMF_SIZE), AKA_MAC_A_SIZE);
/* compute OP /* compute OP
*/ */
ComputeOP(TSIP_CHALLENGE_STACK(self)->operator_id); ComputeOP(TSIP_CHALLENGE_STACK(self)->operator_id);
/* Checks that we hold the same AMF /* Checks that we hold the same AMF
*/ */
for(n=0; n<AKA_AMF_SIZE; n++) for(n=0; n<AKA_AMF_SIZE; n++)
{ {
if(AMF[n] != TSIP_CHALLENGE_STACK(self)->amf[n]) if(AMF[n] != TSIP_CHALLENGE_STACK(self)->amf[n])
{ {
TSK_DEBUG_ERROR("AMF <> XAMF"); TSK_DEBUG_ERROR("AMF <> XAMF");
goto bail; goto bail;
} }
} }
/* Calculate CK, IK and AK /* Calculate CK, IK and AK
*/ */
f2345(K, RAND, akares, CK, IK, AK); f2345(K, RAND, akares, CK, IK, AK);
/* Calculate SQN from SQN_XOR_AK /* Calculate SQN from SQN_XOR_AK
*/ */
for(n=0; n<AKA_SQN_SIZE; n++) for(n=0; n<AKA_SQN_SIZE; n++)
{ {
SQN[n] = (uint8_t) (SQN_XOR_AK()[n] ^ AK[n]); SQN[n] = (uint8_t) (SQN_XOR_AK()[n] ^ AK[n]);
} }
/* Calculate XMAC_A /* Calculate XMAC_A
*/ */
{ {
AKA_MAC_A_T XMAC_A; AKA_MAC_A_T XMAC_A;
f1(K, RAND, SQN, AMF, XMAC_A); f1(K, RAND, SQN, AMF, XMAC_A);
if(!tsk_strnequals(MAC_A, XMAC_A, AKA_MAC_A_SIZE)) if(!tsk_strnequals(MAC_A, XMAC_A, AKA_MAC_A_SIZE))
{ {
TSK_DEBUG_ERROR("XMAC_A <> MAC_A"); TSK_DEBUG_ERROR("XMAC_A <> MAC_A");
goto bail; goto bail;
} }
} }
/* RFC 4169 subclause 3 /* RFC 4169 subclause 3
The HTTP Digest password is derived from base64 encoded PRF(RES || IK||CK, "http-digest-akav2-password") The HTTP Digest password is derived from base64 encoded PRF(RES || IK||CK, "http-digest-akav2-password")
or or
PRF(XRES||IK||CK, "http-digest-akav2-password") instead of (RES) or (XRES) respectively. PRF(XRES||IK||CK, "http-digest-akav2-password") instead of (RES) or (XRES) respectively.
Where PRF ==> HMAC_MD5 function. Where PRF ==> HMAC_MD5 function.
*/ */
if(TSIP_CHALLENGE_IS_AKAv2(self)) if(TSIP_CHALLENGE_IS_AKAv2(self))
{ {
uint8_t res_ik_ck[AKA_RES_SIZE + AKA_IK_SIZE + AKA_CK_SIZE + 26]; uint8_t res_ik_ck[AKA_RES_SIZE + AKA_IK_SIZE + AKA_CK_SIZE + 26];
memcpy(res_ik_ck, akares, AKA_RES_SIZE); memcpy(res_ik_ck, akares, AKA_RES_SIZE);
memcpy((res_ik_ck + AKA_RES_SIZE), IK, AKA_IK_SIZE); memcpy((res_ik_ck + AKA_RES_SIZE), IK, AKA_IK_SIZE);
memcpy((res_ik_ck + AKA_RES_SIZE + AKA_IK_SIZE), CK, AKA_CK_SIZE); memcpy((res_ik_ck + AKA_RES_SIZE + AKA_IK_SIZE), CK, AKA_CK_SIZE);
memcpy((res_ik_ck + AKA_RES_SIZE + AKA_IK_SIZE + AKA_CK_SIZE), "http-digest-akav2-password", 26); memcpy((res_ik_ck + AKA_RES_SIZE + AKA_IK_SIZE + AKA_CK_SIZE), "http-digest-akav2-password", 26);
ret = ((tsk_base64_encode(res_ik_ck, sizeof(res_ik_ck), result)>0) ? 0 : -2); ret = ((tsk_base64_encode(res_ik_ck, sizeof(res_ik_ck), result)>0) ? 0 : -2);
} }
else else
{ {
*result = tsk_calloc(1, AKA_RES_SIZE + 1); *result = tsk_calloc(1, AKA_RES_SIZE + 1);
memcpy(*result, akares, AKA_RES_SIZE); memcpy(*result, akares, AKA_RES_SIZE);
ret = 0; ret = 0;
} }
bail: bail:
TSK_FREE(nonce); TSK_FREE(nonce);
return ret; return ret;
#undef SQN_XOR_AK #undef SQN_XOR_AK
@ -212,20 +212,20 @@ int tsip_challenge_get_response(tsip_challenge_t *self, const char* method, cons
tsk_md5string_t ha1, ha2; tsk_md5string_t ha1, ha2;
nonce_count_t nc; nonce_count_t nc;
/* === /* ===
Calculate HA1 = MD5(A1) = M5(username:realm:secret) Calculate HA1 = MD5(A1) = M5(username:realm:secret)
In case of AKAv1-MD5 and AKAv2-MD5 the secret must be computed as per RFC 3310 + 3GPP TS 206/7/8/9. In case of AKAv1-MD5 and AKAv2-MD5 the secret must be computed as per RFC 3310 + 3GPP TS 206/7/8/9.
The resulting AKA RES parameter is treated as a "password"/"secret" when calculating the response directive of RFC 2617. The resulting AKA RES parameter is treated as a "password"/"secret" when calculating the response directive of RFC 2617.
*/ */
if(TSIP_CHALLENGE_IS_AKAv1(self) || TSIP_CHALLENGE_IS_AKAv2(self)) if(TSIP_CHALLENGE_IS_AKAv1(self) || TSIP_CHALLENGE_IS_AKAv2(self))
{ {
char* akaresult = 0; char* akaresult = 0;
tsip_challenge_get_akares(self, TSIP_CHALLENGE_STACK(self)->password, &akaresult); tsip_challenge_get_akares(self, TSIP_CHALLENGE_STACK(self)->password, &akaresult);
if(thttp_auth_digest_HA1(TSIP_CHALLENGE_USERNAME(self), self->realm, akaresult, &ha1)) if(thttp_auth_digest_HA1(TSIP_CHALLENGE_USERNAME(self), self->realm, akaresult, &ha1))
{ {
// return -1; // return -1;
} }
TSK_FREE(akaresult); TSK_FREE(akaresult);
} }
else else
{ {
@ -234,7 +234,7 @@ int tsip_challenge_get_response(tsip_challenge_t *self, const char* method, cons
/* === /* ===
HA2 HA2
*/ */
thttp_auth_digest_HA2(method, thttp_auth_digest_HA2(method,
uristring, uristring,
entity_body, entity_body,
@ -296,24 +296,24 @@ tsip_header_t *tsip_challenge_create_header_authorization(tsip_challenge_t *self
/* Create the request uri string from uri object /* Create the request uri string from uri object
*/ */
{ {
tsk_istr_t port; tsk_istr_t port;
if(request->line_request.uri->port) tsk_itoa(request->line_request.uri->port, &port); if(request->line_request.uri->port) tsk_itoa(request->line_request.uri->port, &port);
tsk_sprintf(&uristring, "%s%s%s%s%s%s%s%s%s", tsk_sprintf(&uristring, "%s%s%s%s%s%s%s%s%s",
request->line_request.uri->scheme ? request->line_request.uri->scheme : "", request->line_request.uri->scheme ? request->line_request.uri->scheme : "",
request->line_request.uri->scheme ? ":" : "", request->line_request.uri->scheme ? ":" : "",
request->line_request.uri->user_name ? request->line_request.uri->user_name : "", request->line_request.uri->user_name ? request->line_request.uri->user_name : "",
request->line_request.uri->password ? ":" : "", request->line_request.uri->password ? ":" : "",
request->line_request.uri->password ? request->line_request.uri->password : "", request->line_request.uri->password ? request->line_request.uri->password : "",
request->line_request.uri->host ? (request->line_request.uri->user_name ? "@" : "") : "", request->line_request.uri->host ? (request->line_request.uri->user_name ? "@" : "") : "",
request->line_request.uri->host ? request->line_request.uri->host : "", request->line_request.uri->host ? request->line_request.uri->host : "",
request->line_request.uri->port ? ":" : "", request->line_request.uri->port ? ":" : "",
request->line_request.uri->port ? port : "" request->line_request.uri->port ? port : ""
); );
} }
@ -402,61 +402,61 @@ tsip_header_t *tsip_challenge_create_empty_header_authorization(const char* user
//======================================================== //========================================================
// SIP challenge object definition // SIP challenge object definition
// //
/**@ingroup tsip_challenge_group /**@ingroup tsip_challenge_group
*/ */
static void* tsip_challenge_create(void *self, va_list * app) static void* tsip_challenge_create(void *self, va_list * app)
{ {
tsip_challenge_t *challenge = self; tsip_challenge_t *challenge = self;
if(challenge) if(challenge)
{ {
const char* qop; const char* qop;
challenge->stack = va_arg(*app, const tsip_stack_handle_t *); challenge->stack = va_arg(*app, const tsip_stack_handle_t *);
challenge->isproxy = va_arg(*app, unsigned); challenge->isproxy = va_arg(*app, unsigned);
challenge->scheme = tsk_strdup(va_arg(*app, const char*)); challenge->scheme = tsk_strdup(va_arg(*app, const char*));
challenge->realm = tsk_strdup(va_arg(*app, const char*)); challenge->realm = tsk_strdup(va_arg(*app, const char*));
challenge->nonce = tsk_strdup(va_arg(*app, const char*)); challenge->nonce = tsk_strdup(va_arg(*app, const char*));
challenge->opaque = tsk_strdup(va_arg(*app, const char*)); challenge->opaque = tsk_strdup(va_arg(*app, const char*));
challenge->algorithm = tsk_strdup(va_arg(*app, const char*)); challenge->algorithm = tsk_strdup(va_arg(*app, const char*));
qop = va_arg(*app, const char*); qop = va_arg(*app, const char*);
challenge->qop = tsk_strcontains(qop, "auth-int") ? "auth-int" : challenge->qop = tsk_strcontains(qop, "auth-int") ? "auth-int" :
(tsk_strcontains(qop, "auth") ? "auth" : 0); (tsk_strcontains(qop, "auth") ? "auth" : 0);
tsip_challenge_update_cnonce(challenge); tsip_challenge_update_cnonce(challenge);
} }
else TSK_DEBUG_ERROR("Failed to create new sip challenge object."); else TSK_DEBUG_ERROR("Failed to create new sip challenge object.");
return self; return self;
} }
/**@ingroup tsip_challenge_group /**@ingroup tsip_challenge_group
*/ */
static void* tsip_challenge_destroy(void *self) static void* tsip_challenge_destroy(void *self)
{ {
tsip_challenge_t *challenge = self; tsip_challenge_t *challenge = self;
if(challenge) if(challenge)
{ {
TSK_FREE(challenge->scheme); TSK_FREE(challenge->scheme);
TSK_FREE(challenge->realm); TSK_FREE(challenge->realm);
TSK_FREE(challenge->nonce); TSK_FREE(challenge->nonce);
TSK_FREE(challenge->opaque); TSK_FREE(challenge->opaque);
TSK_FREE(challenge->algorithm); TSK_FREE(challenge->algorithm);
//TSK_FREE(challenge->qop); //TSK_FREE(challenge->qop);
} }
else TSK_DEBUG_ERROR("Null SIP challenge object."); else TSK_DEBUG_ERROR("Null SIP challenge object.");
return self; return self;
} }
static const tsk_object_def_t tsip_challenge_def_s = static const tsk_object_def_t tsip_challenge_def_s =
{ {
sizeof(tsip_challenge_t), sizeof(tsip_challenge_t),
tsip_challenge_create, tsip_challenge_create,
tsip_challenge_destroy, tsip_challenge_destroy,
0 0
}; };
const void *tsip_challenge_def_t = &tsip_challenge_def_s; const void *tsip_challenge_def_t = &tsip_challenge_def_s;

View File

@ -1,479 +1,479 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_rijndael.c /**@file tsip_rijndael.c
* @brief Rijndael Implementation. * @brief Rijndael Implementation.
* *
* @section DESCRIPTION * @section DESCRIPTION
* *
* @sa 3G Security * @sa 3G Security
* <a href="http://www.3gpp.org/ftp/Specs/html-info/35205.htm"> 3GPP TS 35.205 </a> * <a href="http://www.3gpp.org/ftp/Specs/html-info/35205.htm"> 3GPP TS 35.205 </a>
* <a href="http://www.3gpp.org/ftp/Specs/html-info/35206.htm"> 3GPP TS 35.206 </a> * <a href="http://www.3gpp.org/ftp/Specs/html-info/35206.htm"> 3GPP TS 35.206 </a>
* <a href="http://www.3gpp.org/ftp/Specs/html-info/35207.htm"> 3GPP TS 35.208 </a> * <a href="http://www.3gpp.org/ftp/Specs/html-info/35207.htm"> 3GPP TS 35.208 </a>
* <a href="http://www.3gpp.org/ftp/Specs/html-info/35208.htm"> 3GPP TS 35.208 </a> * <a href="http://www.3gpp.org/ftp/Specs/html-info/35208.htm"> 3GPP TS 35.208 </a>
* <a href="http://www.3gpp.org/ftp/Specs/html-info/35909.htm"> 3GPP TS 35.909 </a> * <a href="http://www.3gpp.org/ftp/Specs/html-info/35909.htm"> 3GPP TS 35.909 </a>
*------------------------------------------------------------------- *-------------------------------------------------------------------
* Rijndael Implementation * Rijndael Implementation
*------------------------------------------------------------------- *-------------------------------------------------------------------
* *
* A sample 32-bit orientated implementation of Rijndael, the * A sample 32-bit orientated implementation of Rijndael, the
* suggested kernel for the example 3GPP authentication and key * suggested kernel for the example 3GPP authentication and key
* agreement functions. * agreement functions.
* *
* This implementation draws on the description in section 5.2 of * This implementation draws on the description in section 5.2 of
* the AES proposal and also on the implementation by * the AES proposal and also on the implementation by
* Dr B. R. Gladman <brg@gladman.uk.net> 9th October 2000. * Dr B. R. Gladman <brg@gladman.uk.net> 9th October 2000.
* It uses a number of large (4k) lookup tables to implement the * It uses a number of large (4k) lookup tables to implement the
* algorithm in an efficient manner. * algorithm in an efficient manner.
* *
* Note: in this implementation the State is stored in four 32-bit * Note: in this implementation the State is stored in four 32-bit
* words, one per column of the State, with the top byte of the * words, one per column of the State, with the top byte of the
* column being the _least_ significant byte of the word. * column being the _least_ significant byte of the word.
* *
*----------------------------------------------------------------- *-----------------------------------------------------------------
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include "tinysip/authentication/tsip_rijndael.h" #include "tinysip/authentication/tsip_rijndael.h"
#if TSIP_UNDER_WINDOWS || defined(__SYMBIAN32__) #if TSIP_UNDER_WINDOWS || defined(__SYMBIAN32__) || defined(__LITTLE_ENDIAN__)
# define LITTLE_ENDIAN /* For INTEL architecture */ # define LITTLE_ENDIAN /* For INTEL architecture */
#endif #endif
/* Circular byte rotates of 32 bit values */ /* Circular byte rotates of 32 bit values */
#define rot1(x) ((x << 8) | (x >> 24)) #define rot1(x) ((x << 8) | (x >> 24))
#define rot2(x) ((x << 16) | (x >> 16)) #define rot2(x) ((x << 16) | (x >> 16))
#define rot3(x) ((x << 24) | (x >> 8)) #define rot3(x) ((x << 24) | (x >> 8))
/* Extract a byte from a 32-bit uint32_t */ /* Extract a byte from a 32-bit uint32_t */
#define byte0(x) ((uint8_t)(x)) #define byte0(x) ((uint8_t)(x))
#define byte1(x) ((uint8_t)(x >> 8)) #define byte1(x) ((uint8_t)(x >> 8))
#define byte2(x) ((uint8_t)(x >> 16)) #define byte2(x) ((uint8_t)(x >> 16))
#define byte3(x) ((uint8_t)(x >> 24)) #define byte3(x) ((uint8_t)(x >> 24))
/* Put or get a 32 bit uint32_t (v) in machine order from a byte * /* Put or get a 32 bit uint32_t (v) in machine order from a byte *
* address in (x) */ * address in (x) */
#ifdef LITTLE_ENDIAN #ifdef LITTLE_ENDIAN
#define u32_in(x) (*(uint32_t*)(x)) #define u32_in(x) (*(uint32_t*)(x))
#define u32_out(x,y) (*(uint32_t*)(x) = y) #define u32_out(x,y) (*(uint32_t*)(x) = y)
#else #else
/* Invert byte order in a 32 bit variable */ /* Invert byte order in a 32 bit variable */
__inline uint32_t byte_swap(const uint32_t x) __inline uint32_t byte_swap(const uint32_t x)
{ {
return rot1(x) & 0x00ff00ff | rot3(x) & 0xff00ff00; return rot1(x) & 0x00ff00ff | rot3(x) & 0xff00ff00;
} }
__inline uint32_t u32_in(const uint8_t x[]) __inline uint32_t u32_in(const uint8_t x[])
{ {
return byte_swap(*(uint32_t*)x); return byte_swap(*(uint32_t*)x);
}; };
__inline void u32_out(uint8_t x[], const uint32_t v) __inline void u32_out(uint8_t x[], const uint32_t v)
{ {
*(uint32_t*)x = byte_swap(v); *(uint32_t*)x = byte_swap(v);
}; };
#endif #endif
/*--------------- The lookup tables ----------------------------*/ /*--------------- The lookup tables ----------------------------*/
static uint32_t rnd_con[10] = static uint32_t rnd_con[10] =
{ {
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36
}; };
static uint32_t ft_tab[4][256] = static uint32_t ft_tab[4][256] =
{ {
{ {
0xA56363C6,0x847C7CF8,0x997777EE,0x8D7B7BF6,0x0DF2F2FF,0xBD6B6BD6,0xB16F6FDE,0x54C5C591, 0xA56363C6,0x847C7CF8,0x997777EE,0x8D7B7BF6,0x0DF2F2FF,0xBD6B6BD6,0xB16F6FDE,0x54C5C591,
0x50303060,0x03010102,0xA96767CE,0x7D2B2B56,0x19FEFEE7,0x62D7D7B5,0xE6ABAB4D,0x9A7676EC, 0x50303060,0x03010102,0xA96767CE,0x7D2B2B56,0x19FEFEE7,0x62D7D7B5,0xE6ABAB4D,0x9A7676EC,
0x45CACA8F,0x9D82821F,0x40C9C989,0x877D7DFA,0x15FAFAEF,0xEB5959B2,0xC947478E,0x0BF0F0FB, 0x45CACA8F,0x9D82821F,0x40C9C989,0x877D7DFA,0x15FAFAEF,0xEB5959B2,0xC947478E,0x0BF0F0FB,
0xECADAD41,0x67D4D4B3,0xFDA2A25F,0xEAAFAF45,0xBF9C9C23,0xF7A4A453,0x967272E4,0x5BC0C09B, 0xECADAD41,0x67D4D4B3,0xFDA2A25F,0xEAAFAF45,0xBF9C9C23,0xF7A4A453,0x967272E4,0x5BC0C09B,
0xC2B7B775,0x1CFDFDE1,0xAE93933D,0x6A26264C,0x5A36366C,0x413F3F7E,0x02F7F7F5,0x4FCCCC83, 0xC2B7B775,0x1CFDFDE1,0xAE93933D,0x6A26264C,0x5A36366C,0x413F3F7E,0x02F7F7F5,0x4FCCCC83,
0x5C343468,0xF4A5A551,0x34E5E5D1,0x08F1F1F9,0x937171E2,0x73D8D8AB,0x53313162,0x3F15152A, 0x5C343468,0xF4A5A551,0x34E5E5D1,0x08F1F1F9,0x937171E2,0x73D8D8AB,0x53313162,0x3F15152A,
0x0C040408,0x52C7C795,0x65232346,0x5EC3C39D,0x28181830,0xA1969637,0x0F05050A,0xB59A9A2F, 0x0C040408,0x52C7C795,0x65232346,0x5EC3C39D,0x28181830,0xA1969637,0x0F05050A,0xB59A9A2F,
0x0907070E,0x36121224,0x9B80801B,0x3DE2E2DF,0x26EBEBCD,0x6927274E,0xCDB2B27F,0x9F7575EA, 0x0907070E,0x36121224,0x9B80801B,0x3DE2E2DF,0x26EBEBCD,0x6927274E,0xCDB2B27F,0x9F7575EA,
0x1B090912,0x9E83831D,0x742C2C58,0x2E1A1A34,0x2D1B1B36,0xB26E6EDC,0xEE5A5AB4,0xFBA0A05B, 0x1B090912,0x9E83831D,0x742C2C58,0x2E1A1A34,0x2D1B1B36,0xB26E6EDC,0xEE5A5AB4,0xFBA0A05B,
0xF65252A4,0x4D3B3B76,0x61D6D6B7,0xCEB3B37D,0x7B292952,0x3EE3E3DD,0x712F2F5E,0x97848413, 0xF65252A4,0x4D3B3B76,0x61D6D6B7,0xCEB3B37D,0x7B292952,0x3EE3E3DD,0x712F2F5E,0x97848413,
0xF55353A6,0x68D1D1B9,0000000000,0x2CEDEDC1,0x60202040,0x1FFCFCE3,0xC8B1B179,0xED5B5BB6, 0xF55353A6,0x68D1D1B9,0000000000,0x2CEDEDC1,0x60202040,0x1FFCFCE3,0xC8B1B179,0xED5B5BB6,
0xBE6A6AD4,0x46CBCB8D,0xD9BEBE67,0x4B393972,0xDE4A4A94,0xD44C4C98,0xE85858B0,0x4ACFCF85, 0xBE6A6AD4,0x46CBCB8D,0xD9BEBE67,0x4B393972,0xDE4A4A94,0xD44C4C98,0xE85858B0,0x4ACFCF85,
0x6BD0D0BB,0x2AEFEFC5,0xE5AAAA4F,0x16FBFBED,0xC5434386,0xD74D4D9A,0x55333366,0x94858511, 0x6BD0D0BB,0x2AEFEFC5,0xE5AAAA4F,0x16FBFBED,0xC5434386,0xD74D4D9A,0x55333366,0x94858511,
0xCF45458A,0x10F9F9E9,0x06020204,0x817F7FFE,0xF05050A0,0x443C3C78,0xBA9F9F25,0xE3A8A84B, 0xCF45458A,0x10F9F9E9,0x06020204,0x817F7FFE,0xF05050A0,0x443C3C78,0xBA9F9F25,0xE3A8A84B,
0xF35151A2,0xFEA3A35D,0xC0404080,0x8A8F8F05,0xAD92923F,0xBC9D9D21,0x48383870,0x04F5F5F1, 0xF35151A2,0xFEA3A35D,0xC0404080,0x8A8F8F05,0xAD92923F,0xBC9D9D21,0x48383870,0x04F5F5F1,
0xDFBCBC63,0xC1B6B677,0x75DADAAF,0x63212142,0x30101020,0x1AFFFFE5,0x0EF3F3FD,0x6DD2D2BF, 0xDFBCBC63,0xC1B6B677,0x75DADAAF,0x63212142,0x30101020,0x1AFFFFE5,0x0EF3F3FD,0x6DD2D2BF,
0x4CCDCD81,0x140C0C18,0x35131326,0x2FECECC3,0xE15F5FBE,0xA2979735,0xCC444488,0x3917172E, 0x4CCDCD81,0x140C0C18,0x35131326,0x2FECECC3,0xE15F5FBE,0xA2979735,0xCC444488,0x3917172E,
0x57C4C493,0xF2A7A755,0x827E7EFC,0x473D3D7A,0xAC6464C8,0xE75D5DBA,0x2B191932,0x957373E6, 0x57C4C493,0xF2A7A755,0x827E7EFC,0x473D3D7A,0xAC6464C8,0xE75D5DBA,0x2B191932,0x957373E6,
0xA06060C0,0x98818119,0xD14F4F9E,0x7FDCDCA3,0x66222244,0x7E2A2A54,0xAB90903B,0x8388880B, 0xA06060C0,0x98818119,0xD14F4F9E,0x7FDCDCA3,0x66222244,0x7E2A2A54,0xAB90903B,0x8388880B,
0xCA46468C,0x29EEEEC7,0xD3B8B86B,0x3C141428,0x79DEDEA7,0xE25E5EBC,0x1D0B0B16,0x76DBDBAD, 0xCA46468C,0x29EEEEC7,0xD3B8B86B,0x3C141428,0x79DEDEA7,0xE25E5EBC,0x1D0B0B16,0x76DBDBAD,
0x3BE0E0DB,0x56323264,0x4E3A3A74,0x1E0A0A14,0xDB494992,0x0A06060C,0x6C242448,0xE45C5CB8, 0x3BE0E0DB,0x56323264,0x4E3A3A74,0x1E0A0A14,0xDB494992,0x0A06060C,0x6C242448,0xE45C5CB8,
0x5DC2C29F,0x6ED3D3BD,0xEFACAC43,0xA66262C4,0xA8919139,0xA4959531,0x37E4E4D3,0x8B7979F2, 0x5DC2C29F,0x6ED3D3BD,0xEFACAC43,0xA66262C4,0xA8919139,0xA4959531,0x37E4E4D3,0x8B7979F2,
0x32E7E7D5,0x43C8C88B,0x5937376E,0xB76D6DDA,0x8C8D8D01,0x64D5D5B1,0xD24E4E9C,0xE0A9A949, 0x32E7E7D5,0x43C8C88B,0x5937376E,0xB76D6DDA,0x8C8D8D01,0x64D5D5B1,0xD24E4E9C,0xE0A9A949,
0xB46C6CD8,0xFA5656AC,0x07F4F4F3,0x25EAEACF,0xAF6565CA,0x8E7A7AF4,0xE9AEAE47,0x18080810, 0xB46C6CD8,0xFA5656AC,0x07F4F4F3,0x25EAEACF,0xAF6565CA,0x8E7A7AF4,0xE9AEAE47,0x18080810,
0xD5BABA6F,0x887878F0,0x6F25254A,0x722E2E5C,0x241C1C38,0xF1A6A657,0xC7B4B473,0x51C6C697, 0xD5BABA6F,0x887878F0,0x6F25254A,0x722E2E5C,0x241C1C38,0xF1A6A657,0xC7B4B473,0x51C6C697,
0x23E8E8CB,0x7CDDDDA1,0x9C7474E8,0x211F1F3E,0xDD4B4B96,0xDCBDBD61,0x868B8B0D,0x858A8A0F, 0x23E8E8CB,0x7CDDDDA1,0x9C7474E8,0x211F1F3E,0xDD4B4B96,0xDCBDBD61,0x868B8B0D,0x858A8A0F,
0x907070E0,0x423E3E7C,0xC4B5B571,0xAA6666CC,0xD8484890,0x05030306,0x01F6F6F7,0x120E0E1C, 0x907070E0,0x423E3E7C,0xC4B5B571,0xAA6666CC,0xD8484890,0x05030306,0x01F6F6F7,0x120E0E1C,
0xA36161C2,0x5F35356A,0xF95757AE,0xD0B9B969,0x91868617,0x58C1C199,0x271D1D3A,0xB99E9E27, 0xA36161C2,0x5F35356A,0xF95757AE,0xD0B9B969,0x91868617,0x58C1C199,0x271D1D3A,0xB99E9E27,
0x38E1E1D9,0x13F8F8EB,0xB398982B,0x33111122,0xBB6969D2,0x70D9D9A9,0x898E8E07,0xA7949433, 0x38E1E1D9,0x13F8F8EB,0xB398982B,0x33111122,0xBB6969D2,0x70D9D9A9,0x898E8E07,0xA7949433,
0xB69B9B2D,0x221E1E3C,0x92878715,0x20E9E9C9,0x49CECE87,0xFF5555AA,0x78282850,0x7ADFDFA5, 0xB69B9B2D,0x221E1E3C,0x92878715,0x20E9E9C9,0x49CECE87,0xFF5555AA,0x78282850,0x7ADFDFA5,
0x8F8C8C03,0xF8A1A159,0x80898909,0x170D0D1A,0xDABFBF65,0x31E6E6D7,0xC6424284,0xB86868D0, 0x8F8C8C03,0xF8A1A159,0x80898909,0x170D0D1A,0xDABFBF65,0x31E6E6D7,0xC6424284,0xB86868D0,
0xC3414182,0xB0999929,0x772D2D5A,0x110F0F1E,0xCBB0B07B,0xFC5454A8,0xD6BBBB6D,0x3A16162C 0xC3414182,0xB0999929,0x772D2D5A,0x110F0F1E,0xCBB0B07B,0xFC5454A8,0xD6BBBB6D,0x3A16162C
}, },
{ {
0x6363C6A5,0x7C7CF884,0x7777EE99,0x7B7BF68D,0xF2F2FF0D,0x6B6BD6BD,0x6F6FDEB1,0xC5C59154, 0x6363C6A5,0x7C7CF884,0x7777EE99,0x7B7BF68D,0xF2F2FF0D,0x6B6BD6BD,0x6F6FDEB1,0xC5C59154,
0x30306050,0x01010203,0x6767CEA9,0x2B2B567D,0xFEFEE719,0xD7D7B562,0xABAB4DE6,0x7676EC9A, 0x30306050,0x01010203,0x6767CEA9,0x2B2B567D,0xFEFEE719,0xD7D7B562,0xABAB4DE6,0x7676EC9A,
0xCACA8F45,0x82821F9D,0xC9C98940,0x7D7DFA87,0xFAFAEF15,0x5959B2EB,0x47478EC9,0xF0F0FB0B, 0xCACA8F45,0x82821F9D,0xC9C98940,0x7D7DFA87,0xFAFAEF15,0x5959B2EB,0x47478EC9,0xF0F0FB0B,
0xADAD41EC,0xD4D4B367,0xA2A25FFD,0xAFAF45EA,0x9C9C23BF,0xA4A453F7,0x7272E496,0xC0C09B5B, 0xADAD41EC,0xD4D4B367,0xA2A25FFD,0xAFAF45EA,0x9C9C23BF,0xA4A453F7,0x7272E496,0xC0C09B5B,
0xB7B775C2,0xFDFDE11C,0x93933DAE,0x26264C6A,0x36366C5A,0x3F3F7E41,0xF7F7F502,0xCCCC834F, 0xB7B775C2,0xFDFDE11C,0x93933DAE,0x26264C6A,0x36366C5A,0x3F3F7E41,0xF7F7F502,0xCCCC834F,
0x3434685C,0xA5A551F4,0xE5E5D134,0xF1F1F908,0x7171E293,0xD8D8AB73,0x31316253,0x15152A3F, 0x3434685C,0xA5A551F4,0xE5E5D134,0xF1F1F908,0x7171E293,0xD8D8AB73,0x31316253,0x15152A3F,
0x0404080C,0xC7C79552,0x23234665,0xC3C39D5E,0x18183028,0x969637A1,0x05050A0F,0x9A9A2FB5, 0x0404080C,0xC7C79552,0x23234665,0xC3C39D5E,0x18183028,0x969637A1,0x05050A0F,0x9A9A2FB5,
0x07070E09,0x12122436,0x80801B9B,0xE2E2DF3D,0xEBEBCD26,0x27274E69,0xB2B27FCD,0x7575EA9F, 0x07070E09,0x12122436,0x80801B9B,0xE2E2DF3D,0xEBEBCD26,0x27274E69,0xB2B27FCD,0x7575EA9F,
0x0909121B,0x83831D9E,0x2C2C5874,0x1A1A342E,0x1B1B362D,0x6E6EDCB2,0x5A5AB4EE,0xA0A05BFB, 0x0909121B,0x83831D9E,0x2C2C5874,0x1A1A342E,0x1B1B362D,0x6E6EDCB2,0x5A5AB4EE,0xA0A05BFB,
0x5252A4F6,0x3B3B764D,0xD6D6B761,0xB3B37DCE,0x2929527B,0xE3E3DD3E,0x2F2F5E71,0x84841397, 0x5252A4F6,0x3B3B764D,0xD6D6B761,0xB3B37DCE,0x2929527B,0xE3E3DD3E,0x2F2F5E71,0x84841397,
0x5353A6F5,0xD1D1B968,0000000000,0xEDEDC12C,0x20204060,0xFCFCE31F,0xB1B179C8,0x5B5BB6ED, 0x5353A6F5,0xD1D1B968,0000000000,0xEDEDC12C,0x20204060,0xFCFCE31F,0xB1B179C8,0x5B5BB6ED,
0x6A6AD4BE,0xCBCB8D46,0xBEBE67D9,0x3939724B,0x4A4A94DE,0x4C4C98D4,0x5858B0E8,0xCFCF854A, 0x6A6AD4BE,0xCBCB8D46,0xBEBE67D9,0x3939724B,0x4A4A94DE,0x4C4C98D4,0x5858B0E8,0xCFCF854A,
0xD0D0BB6B,0xEFEFC52A,0xAAAA4FE5,0xFBFBED16,0x434386C5,0x4D4D9AD7,0x33336655,0x85851194, 0xD0D0BB6B,0xEFEFC52A,0xAAAA4FE5,0xFBFBED16,0x434386C5,0x4D4D9AD7,0x33336655,0x85851194,
0x45458ACF,0xF9F9E910,0x02020406,0x7F7FFE81,0x5050A0F0,0x3C3C7844,0x9F9F25BA,0xA8A84BE3, 0x45458ACF,0xF9F9E910,0x02020406,0x7F7FFE81,0x5050A0F0,0x3C3C7844,0x9F9F25BA,0xA8A84BE3,
0x5151A2F3,0xA3A35DFE,0x404080C0,0x8F8F058A,0x92923FAD,0x9D9D21BC,0x38387048,0xF5F5F104, 0x5151A2F3,0xA3A35DFE,0x404080C0,0x8F8F058A,0x92923FAD,0x9D9D21BC,0x38387048,0xF5F5F104,
0xBCBC63DF,0xB6B677C1,0xDADAAF75,0x21214263,0x10102030,0xFFFFE51A,0xF3F3FD0E,0xD2D2BF6D, 0xBCBC63DF,0xB6B677C1,0xDADAAF75,0x21214263,0x10102030,0xFFFFE51A,0xF3F3FD0E,0xD2D2BF6D,
0xCDCD814C,0x0C0C1814,0x13132635,0xECECC32F,0x5F5FBEE1,0x979735A2,0x444488CC,0x17172E39, 0xCDCD814C,0x0C0C1814,0x13132635,0xECECC32F,0x5F5FBEE1,0x979735A2,0x444488CC,0x17172E39,
0xC4C49357,0xA7A755F2,0x7E7EFC82,0x3D3D7A47,0x6464C8AC,0x5D5DBAE7,0x1919322B,0x7373E695, 0xC4C49357,0xA7A755F2,0x7E7EFC82,0x3D3D7A47,0x6464C8AC,0x5D5DBAE7,0x1919322B,0x7373E695,
0x6060C0A0,0x81811998,0x4F4F9ED1,0xDCDCA37F,0x22224466,0x2A2A547E,0x90903BAB,0x88880B83, 0x6060C0A0,0x81811998,0x4F4F9ED1,0xDCDCA37F,0x22224466,0x2A2A547E,0x90903BAB,0x88880B83,
0x46468CCA,0xEEEEC729,0xB8B86BD3,0x1414283C,0xDEDEA779,0x5E5EBCE2,0x0B0B161D,0xDBDBAD76, 0x46468CCA,0xEEEEC729,0xB8B86BD3,0x1414283C,0xDEDEA779,0x5E5EBCE2,0x0B0B161D,0xDBDBAD76,
0xE0E0DB3B,0x32326456,0x3A3A744E,0x0A0A141E,0x494992DB,0x06060C0A,0x2424486C,0x5C5CB8E4, 0xE0E0DB3B,0x32326456,0x3A3A744E,0x0A0A141E,0x494992DB,0x06060C0A,0x2424486C,0x5C5CB8E4,
0xC2C29F5D,0xD3D3BD6E,0xACAC43EF,0x6262C4A6,0x919139A8,0x959531A4,0xE4E4D337,0x7979F28B, 0xC2C29F5D,0xD3D3BD6E,0xACAC43EF,0x6262C4A6,0x919139A8,0x959531A4,0xE4E4D337,0x7979F28B,
0xE7E7D532,0xC8C88B43,0x37376E59,0x6D6DDAB7,0x8D8D018C,0xD5D5B164,0x4E4E9CD2,0xA9A949E0, 0xE7E7D532,0xC8C88B43,0x37376E59,0x6D6DDAB7,0x8D8D018C,0xD5D5B164,0x4E4E9CD2,0xA9A949E0,
0x6C6CD8B4,0x5656ACFA,0xF4F4F307,0xEAEACF25,0x6565CAAF,0x7A7AF48E,0xAEAE47E9,0x08081018, 0x6C6CD8B4,0x5656ACFA,0xF4F4F307,0xEAEACF25,0x6565CAAF,0x7A7AF48E,0xAEAE47E9,0x08081018,
0xBABA6FD5,0x7878F088,0x25254A6F,0x2E2E5C72,0x1C1C3824,0xA6A657F1,0xB4B473C7,0xC6C69751, 0xBABA6FD5,0x7878F088,0x25254A6F,0x2E2E5C72,0x1C1C3824,0xA6A657F1,0xB4B473C7,0xC6C69751,
0xE8E8CB23,0xDDDDA17C,0x7474E89C,0x1F1F3E21,0x4B4B96DD,0xBDBD61DC,0x8B8B0D86,0x8A8A0F85, 0xE8E8CB23,0xDDDDA17C,0x7474E89C,0x1F1F3E21,0x4B4B96DD,0xBDBD61DC,0x8B8B0D86,0x8A8A0F85,
0x7070E090,0x3E3E7C42,0xB5B571C4,0x6666CCAA,0x484890D8,0x03030605,0xF6F6F701,0x0E0E1C12, 0x7070E090,0x3E3E7C42,0xB5B571C4,0x6666CCAA,0x484890D8,0x03030605,0xF6F6F701,0x0E0E1C12,
0x6161C2A3,0x35356A5F,0x5757AEF9,0xB9B969D0,0x86861791,0xC1C19958,0x1D1D3A27,0x9E9E27B9, 0x6161C2A3,0x35356A5F,0x5757AEF9,0xB9B969D0,0x86861791,0xC1C19958,0x1D1D3A27,0x9E9E27B9,
0xE1E1D938,0xF8F8EB13,0x98982BB3,0x11112233,0x6969D2BB,0xD9D9A970,0x8E8E0789,0x949433A7, 0xE1E1D938,0xF8F8EB13,0x98982BB3,0x11112233,0x6969D2BB,0xD9D9A970,0x8E8E0789,0x949433A7,
0x9B9B2DB6,0x1E1E3C22,0x87871592,0xE9E9C920,0xCECE8749,0x5555AAFF,0x28285078,0xDFDFA57A, 0x9B9B2DB6,0x1E1E3C22,0x87871592,0xE9E9C920,0xCECE8749,0x5555AAFF,0x28285078,0xDFDFA57A,
0x8C8C038F,0xA1A159F8,0x89890980,0x0D0D1A17,0xBFBF65DA,0xE6E6D731,0x424284C6,0x6868D0B8, 0x8C8C038F,0xA1A159F8,0x89890980,0x0D0D1A17,0xBFBF65DA,0xE6E6D731,0x424284C6,0x6868D0B8,
0x414182C3,0x999929B0,0x2D2D5A77,0x0F0F1E11,0xB0B07BCB,0x5454A8FC,0xBBBB6DD6,0x16162C3A 0x414182C3,0x999929B0,0x2D2D5A77,0x0F0F1E11,0xB0B07BCB,0x5454A8FC,0xBBBB6DD6,0x16162C3A
}, },
{ {
0x63C6A563,0x7CF8847C,0x77EE9977,0x7BF68D7B,0xF2FF0DF2,0x6BD6BD6B,0x6FDEB16F,0xC59154C5, 0x63C6A563,0x7CF8847C,0x77EE9977,0x7BF68D7B,0xF2FF0DF2,0x6BD6BD6B,0x6FDEB16F,0xC59154C5,
0x30605030,0x01020301,0x67CEA967,0x2B567D2B,0xFEE719FE,0xD7B562D7,0xAB4DE6AB,0x76EC9A76, 0x30605030,0x01020301,0x67CEA967,0x2B567D2B,0xFEE719FE,0xD7B562D7,0xAB4DE6AB,0x76EC9A76,
0xCA8F45CA,0x821F9D82,0xC98940C9,0x7DFA877D,0xFAEF15FA,0x59B2EB59,0x478EC947,0xF0FB0BF0, 0xCA8F45CA,0x821F9D82,0xC98940C9,0x7DFA877D,0xFAEF15FA,0x59B2EB59,0x478EC947,0xF0FB0BF0,
0xAD41ECAD,0xD4B367D4,0xA25FFDA2,0xAF45EAAF,0x9C23BF9C,0xA453F7A4,0x72E49672,0xC09B5BC0, 0xAD41ECAD,0xD4B367D4,0xA25FFDA2,0xAF45EAAF,0x9C23BF9C,0xA453F7A4,0x72E49672,0xC09B5BC0,
0xB775C2B7,0xFDE11CFD,0x933DAE93,0x264C6A26,0x366C5A36,0x3F7E413F,0xF7F502F7,0xCC834FCC, 0xB775C2B7,0xFDE11CFD,0x933DAE93,0x264C6A26,0x366C5A36,0x3F7E413F,0xF7F502F7,0xCC834FCC,
0x34685C34,0xA551F4A5,0xE5D134E5,0xF1F908F1,0x71E29371,0xD8AB73D8,0x31625331,0x152A3F15, 0x34685C34,0xA551F4A5,0xE5D134E5,0xF1F908F1,0x71E29371,0xD8AB73D8,0x31625331,0x152A3F15,
0x04080C04,0xC79552C7,0x23466523,0xC39D5EC3,0x18302818,0x9637A196,0x050A0F05,0x9A2FB59A, 0x04080C04,0xC79552C7,0x23466523,0xC39D5EC3,0x18302818,0x9637A196,0x050A0F05,0x9A2FB59A,
0x070E0907,0x12243612,0x801B9B80,0xE2DF3DE2,0xEBCD26EB,0x274E6927,0xB27FCDB2,0x75EA9F75, 0x070E0907,0x12243612,0x801B9B80,0xE2DF3DE2,0xEBCD26EB,0x274E6927,0xB27FCDB2,0x75EA9F75,
0x09121B09,0x831D9E83,0x2C58742C,0x1A342E1A,0x1B362D1B,0x6EDCB26E,0x5AB4EE5A,0xA05BFBA0, 0x09121B09,0x831D9E83,0x2C58742C,0x1A342E1A,0x1B362D1B,0x6EDCB26E,0x5AB4EE5A,0xA05BFBA0,
0x52A4F652,0x3B764D3B,0xD6B761D6,0xB37DCEB3,0x29527B29,0xE3DD3EE3,0x2F5E712F,0x84139784, 0x52A4F652,0x3B764D3B,0xD6B761D6,0xB37DCEB3,0x29527B29,0xE3DD3EE3,0x2F5E712F,0x84139784,
0x53A6F553,0xD1B968D1,0000000000,0xEDC12CED,0x20406020,0xFCE31FFC,0xB179C8B1,0x5BB6ED5B, 0x53A6F553,0xD1B968D1,0000000000,0xEDC12CED,0x20406020,0xFCE31FFC,0xB179C8B1,0x5BB6ED5B,
0x6AD4BE6A,0xCB8D46CB,0xBE67D9BE,0x39724B39,0x4A94DE4A,0x4C98D44C,0x58B0E858,0xCF854ACF, 0x6AD4BE6A,0xCB8D46CB,0xBE67D9BE,0x39724B39,0x4A94DE4A,0x4C98D44C,0x58B0E858,0xCF854ACF,
0xD0BB6BD0,0xEFC52AEF,0xAA4FE5AA,0xFBED16FB,0x4386C543,0x4D9AD74D,0x33665533,0x85119485, 0xD0BB6BD0,0xEFC52AEF,0xAA4FE5AA,0xFBED16FB,0x4386C543,0x4D9AD74D,0x33665533,0x85119485,
0x458ACF45,0xF9E910F9,0x02040602,0x7FFE817F,0x50A0F050,0x3C78443C,0x9F25BA9F,0xA84BE3A8, 0x458ACF45,0xF9E910F9,0x02040602,0x7FFE817F,0x50A0F050,0x3C78443C,0x9F25BA9F,0xA84BE3A8,
0x51A2F351,0xA35DFEA3,0x4080C040,0x8F058A8F,0x923FAD92,0x9D21BC9D,0x38704838,0xF5F104F5, 0x51A2F351,0xA35DFEA3,0x4080C040,0x8F058A8F,0x923FAD92,0x9D21BC9D,0x38704838,0xF5F104F5,
0xBC63DFBC,0xB677C1B6,0xDAAF75DA,0x21426321,0x10203010,0xFFE51AFF,0xF3FD0EF3,0xD2BF6DD2, 0xBC63DFBC,0xB677C1B6,0xDAAF75DA,0x21426321,0x10203010,0xFFE51AFF,0xF3FD0EF3,0xD2BF6DD2,
0xCD814CCD,0x0C18140C,0x13263513,0xECC32FEC,0x5FBEE15F,0x9735A297,0x4488CC44,0x172E3917, 0xCD814CCD,0x0C18140C,0x13263513,0xECC32FEC,0x5FBEE15F,0x9735A297,0x4488CC44,0x172E3917,
0xC49357C4,0xA755F2A7,0x7EFC827E,0x3D7A473D,0x64C8AC64,0x5DBAE75D,0x19322B19,0x73E69573, 0xC49357C4,0xA755F2A7,0x7EFC827E,0x3D7A473D,0x64C8AC64,0x5DBAE75D,0x19322B19,0x73E69573,
0x60C0A060,0x81199881,0x4F9ED14F,0xDCA37FDC,0x22446622,0x2A547E2A,0x903BAB90,0x880B8388, 0x60C0A060,0x81199881,0x4F9ED14F,0xDCA37FDC,0x22446622,0x2A547E2A,0x903BAB90,0x880B8388,
0x468CCA46,0xEEC729EE,0xB86BD3B8,0x14283C14,0xDEA779DE,0x5EBCE25E,0x0B161D0B,0xDBAD76DB, 0x468CCA46,0xEEC729EE,0xB86BD3B8,0x14283C14,0xDEA779DE,0x5EBCE25E,0x0B161D0B,0xDBAD76DB,
0xE0DB3BE0,0x32645632,0x3A744E3A,0x0A141E0A,0x4992DB49,0x060C0A06,0x24486C24,0x5CB8E45C, 0xE0DB3BE0,0x32645632,0x3A744E3A,0x0A141E0A,0x4992DB49,0x060C0A06,0x24486C24,0x5CB8E45C,
0xC29F5DC2,0xD3BD6ED3,0xAC43EFAC,0x62C4A662,0x9139A891,0x9531A495,0xE4D337E4,0x79F28B79, 0xC29F5DC2,0xD3BD6ED3,0xAC43EFAC,0x62C4A662,0x9139A891,0x9531A495,0xE4D337E4,0x79F28B79,
0xE7D532E7,0xC88B43C8,0x376E5937,0x6DDAB76D,0x8D018C8D,0xD5B164D5,0x4E9CD24E,0xA949E0A9, 0xE7D532E7,0xC88B43C8,0x376E5937,0x6DDAB76D,0x8D018C8D,0xD5B164D5,0x4E9CD24E,0xA949E0A9,
0x6CD8B46C,0x56ACFA56,0xF4F307F4,0xEACF25EA,0x65CAAF65,0x7AF48E7A,0xAE47E9AE,0x08101808, 0x6CD8B46C,0x56ACFA56,0xF4F307F4,0xEACF25EA,0x65CAAF65,0x7AF48E7A,0xAE47E9AE,0x08101808,
0xBA6FD5BA,0x78F08878,0x254A6F25,0x2E5C722E,0x1C38241C,0xA657F1A6,0xB473C7B4,0xC69751C6, 0xBA6FD5BA,0x78F08878,0x254A6F25,0x2E5C722E,0x1C38241C,0xA657F1A6,0xB473C7B4,0xC69751C6,
0xE8CB23E8,0xDDA17CDD,0x74E89C74,0x1F3E211F,0x4B96DD4B,0xBD61DCBD,0x8B0D868B,0x8A0F858A, 0xE8CB23E8,0xDDA17CDD,0x74E89C74,0x1F3E211F,0x4B96DD4B,0xBD61DCBD,0x8B0D868B,0x8A0F858A,
0x70E09070,0x3E7C423E,0xB571C4B5,0x66CCAA66,0x4890D848,0x03060503,0xF6F701F6,0x0E1C120E, 0x70E09070,0x3E7C423E,0xB571C4B5,0x66CCAA66,0x4890D848,0x03060503,0xF6F701F6,0x0E1C120E,
0x61C2A361,0x356A5F35,0x57AEF957,0xB969D0B9,0x86179186,0xC19958C1,0x1D3A271D,0x9E27B99E, 0x61C2A361,0x356A5F35,0x57AEF957,0xB969D0B9,0x86179186,0xC19958C1,0x1D3A271D,0x9E27B99E,
0xE1D938E1,0xF8EB13F8,0x982BB398,0x11223311,0x69D2BB69,0xD9A970D9,0x8E07898E,0x9433A794, 0xE1D938E1,0xF8EB13F8,0x982BB398,0x11223311,0x69D2BB69,0xD9A970D9,0x8E07898E,0x9433A794,
0x9B2DB69B,0x1E3C221E,0x87159287,0xE9C920E9,0xCE8749CE,0x55AAFF55,0x28507828,0xDFA57ADF, 0x9B2DB69B,0x1E3C221E,0x87159287,0xE9C920E9,0xCE8749CE,0x55AAFF55,0x28507828,0xDFA57ADF,
0x8C038F8C,0xA159F8A1,0x89098089,0x0D1A170D,0xBF65DABF,0xE6D731E6,0x4284C642,0x68D0B868, 0x8C038F8C,0xA159F8A1,0x89098089,0x0D1A170D,0xBF65DABF,0xE6D731E6,0x4284C642,0x68D0B868,
0x4182C341,0x9929B099,0x2D5A772D,0x0F1E110F,0xB07BCBB0,0x54A8FC54,0xBB6DD6BB,0x162C3A16 0x4182C341,0x9929B099,0x2D5A772D,0x0F1E110F,0xB07BCBB0,0x54A8FC54,0xBB6DD6BB,0x162C3A16
}, },
{ {
0xC6A56363,0xF8847C7C,0xEE997777,0xF68D7B7B,0xFF0DF2F2,0xD6BD6B6B,0xDEB16F6F,0x9154C5C5, 0xC6A56363,0xF8847C7C,0xEE997777,0xF68D7B7B,0xFF0DF2F2,0xD6BD6B6B,0xDEB16F6F,0x9154C5C5,
0x60503030,0x02030101,0xCEA96767,0x567D2B2B,0xE719FEFE,0xB562D7D7,0x4DE6ABAB,0xEC9A7676, 0x60503030,0x02030101,0xCEA96767,0x567D2B2B,0xE719FEFE,0xB562D7D7,0x4DE6ABAB,0xEC9A7676,
0x8F45CACA,0x1F9D8282,0x8940C9C9,0xFA877D7D,0xEF15FAFA,0xB2EB5959,0x8EC94747,0xFB0BF0F0, 0x8F45CACA,0x1F9D8282,0x8940C9C9,0xFA877D7D,0xEF15FAFA,0xB2EB5959,0x8EC94747,0xFB0BF0F0,
0x41ECADAD,0xB367D4D4,0x5FFDA2A2,0x45EAAFAF,0x23BF9C9C,0x53F7A4A4,0xE4967272,0x9B5BC0C0, 0x41ECADAD,0xB367D4D4,0x5FFDA2A2,0x45EAAFAF,0x23BF9C9C,0x53F7A4A4,0xE4967272,0x9B5BC0C0,
0x75C2B7B7,0xE11CFDFD,0x3DAE9393,0x4C6A2626,0x6C5A3636,0x7E413F3F,0xF502F7F7,0x834FCCCC, 0x75C2B7B7,0xE11CFDFD,0x3DAE9393,0x4C6A2626,0x6C5A3636,0x7E413F3F,0xF502F7F7,0x834FCCCC,
0x685C3434,0x51F4A5A5,0xD134E5E5,0xF908F1F1,0xE2937171,0xAB73D8D8,0x62533131,0x2A3F1515, 0x685C3434,0x51F4A5A5,0xD134E5E5,0xF908F1F1,0xE2937171,0xAB73D8D8,0x62533131,0x2A3F1515,
0x080C0404,0x9552C7C7,0x46652323,0x9D5EC3C3,0x30281818,0x37A19696,0x0A0F0505,0x2FB59A9A, 0x080C0404,0x9552C7C7,0x46652323,0x9D5EC3C3,0x30281818,0x37A19696,0x0A0F0505,0x2FB59A9A,
0x0E090707,0x24361212,0x1B9B8080,0xDF3DE2E2,0xCD26EBEB,0x4E692727,0x7FCDB2B2,0xEA9F7575, 0x0E090707,0x24361212,0x1B9B8080,0xDF3DE2E2,0xCD26EBEB,0x4E692727,0x7FCDB2B2,0xEA9F7575,
0x121B0909,0x1D9E8383,0x58742C2C,0x342E1A1A,0x362D1B1B,0xDCB26E6E,0xB4EE5A5A,0x5BFBA0A0, 0x121B0909,0x1D9E8383,0x58742C2C,0x342E1A1A,0x362D1B1B,0xDCB26E6E,0xB4EE5A5A,0x5BFBA0A0,
0xA4F65252,0x764D3B3B,0xB761D6D6,0x7DCEB3B3,0x527B2929,0xDD3EE3E3,0x5E712F2F,0x13978484, 0xA4F65252,0x764D3B3B,0xB761D6D6,0x7DCEB3B3,0x527B2929,0xDD3EE3E3,0x5E712F2F,0x13978484,
0xA6F55353,0xB968D1D1,0000000000,0xC12CEDED,0x40602020,0xE31FFCFC,0x79C8B1B1,0xB6ED5B5B, 0xA6F55353,0xB968D1D1,0000000000,0xC12CEDED,0x40602020,0xE31FFCFC,0x79C8B1B1,0xB6ED5B5B,
0xD4BE6A6A,0x8D46CBCB,0x67D9BEBE,0x724B3939,0x94DE4A4A,0x98D44C4C,0xB0E85858,0x854ACFCF, 0xD4BE6A6A,0x8D46CBCB,0x67D9BEBE,0x724B3939,0x94DE4A4A,0x98D44C4C,0xB0E85858,0x854ACFCF,
0xBB6BD0D0,0xC52AEFEF,0x4FE5AAAA,0xED16FBFB,0x86C54343,0x9AD74D4D,0x66553333,0x11948585, 0xBB6BD0D0,0xC52AEFEF,0x4FE5AAAA,0xED16FBFB,0x86C54343,0x9AD74D4D,0x66553333,0x11948585,
0x8ACF4545,0xE910F9F9,0x04060202,0xFE817F7F,0xA0F05050,0x78443C3C,0x25BA9F9F,0x4BE3A8A8, 0x8ACF4545,0xE910F9F9,0x04060202,0xFE817F7F,0xA0F05050,0x78443C3C,0x25BA9F9F,0x4BE3A8A8,
0xA2F35151,0x5DFEA3A3,0x80C04040,0x058A8F8F,0x3FAD9292,0x21BC9D9D,0x70483838,0xF104F5F5, 0xA2F35151,0x5DFEA3A3,0x80C04040,0x058A8F8F,0x3FAD9292,0x21BC9D9D,0x70483838,0xF104F5F5,
0x63DFBCBC,0x77C1B6B6,0xAF75DADA,0x42632121,0x20301010,0xE51AFFFF,0xFD0EF3F3,0xBF6DD2D2, 0x63DFBCBC,0x77C1B6B6,0xAF75DADA,0x42632121,0x20301010,0xE51AFFFF,0xFD0EF3F3,0xBF6DD2D2,
0x814CCDCD,0x18140C0C,0x26351313,0xC32FECEC,0xBEE15F5F,0x35A29797,0x88CC4444,0x2E391717, 0x814CCDCD,0x18140C0C,0x26351313,0xC32FECEC,0xBEE15F5F,0x35A29797,0x88CC4444,0x2E391717,
0x9357C4C4,0x55F2A7A7,0xFC827E7E,0x7A473D3D,0xC8AC6464,0xBAE75D5D,0x322B1919,0xE6957373, 0x9357C4C4,0x55F2A7A7,0xFC827E7E,0x7A473D3D,0xC8AC6464,0xBAE75D5D,0x322B1919,0xE6957373,
0xC0A06060,0x19988181,0x9ED14F4F,0xA37FDCDC,0x44662222,0x547E2A2A,0x3BAB9090,0x0B838888, 0xC0A06060,0x19988181,0x9ED14F4F,0xA37FDCDC,0x44662222,0x547E2A2A,0x3BAB9090,0x0B838888,
0x8CCA4646,0xC729EEEE,0x6BD3B8B8,0x283C1414,0xA779DEDE,0xBCE25E5E,0x161D0B0B,0xAD76DBDB, 0x8CCA4646,0xC729EEEE,0x6BD3B8B8,0x283C1414,0xA779DEDE,0xBCE25E5E,0x161D0B0B,0xAD76DBDB,
0xDB3BE0E0,0x64563232,0x744E3A3A,0x141E0A0A,0x92DB4949,0x0C0A0606,0x486C2424,0xB8E45C5C, 0xDB3BE0E0,0x64563232,0x744E3A3A,0x141E0A0A,0x92DB4949,0x0C0A0606,0x486C2424,0xB8E45C5C,
0x9F5DC2C2,0xBD6ED3D3,0x43EFACAC,0xC4A66262,0x39A89191,0x31A49595,0xD337E4E4,0xF28B7979, 0x9F5DC2C2,0xBD6ED3D3,0x43EFACAC,0xC4A66262,0x39A89191,0x31A49595,0xD337E4E4,0xF28B7979,
0xD532E7E7,0x8B43C8C8,0x6E593737,0xDAB76D6D,0x018C8D8D,0xB164D5D5,0x9CD24E4E,0x49E0A9A9, 0xD532E7E7,0x8B43C8C8,0x6E593737,0xDAB76D6D,0x018C8D8D,0xB164D5D5,0x9CD24E4E,0x49E0A9A9,
0xD8B46C6C,0xACFA5656,0xF307F4F4,0xCF25EAEA,0xCAAF6565,0xF48E7A7A,0x47E9AEAE,0x10180808, 0xD8B46C6C,0xACFA5656,0xF307F4F4,0xCF25EAEA,0xCAAF6565,0xF48E7A7A,0x47E9AEAE,0x10180808,
0x6FD5BABA,0xF0887878,0x4A6F2525,0x5C722E2E,0x38241C1C,0x57F1A6A6,0x73C7B4B4,0x9751C6C6, 0x6FD5BABA,0xF0887878,0x4A6F2525,0x5C722E2E,0x38241C1C,0x57F1A6A6,0x73C7B4B4,0x9751C6C6,
0xCB23E8E8,0xA17CDDDD,0xE89C7474,0x3E211F1F,0x96DD4B4B,0x61DCBDBD,0x0D868B8B,0x0F858A8A, 0xCB23E8E8,0xA17CDDDD,0xE89C7474,0x3E211F1F,0x96DD4B4B,0x61DCBDBD,0x0D868B8B,0x0F858A8A,
0xE0907070,0x7C423E3E,0x71C4B5B5,0xCCAA6666,0x90D84848,0x06050303,0xF701F6F6,0x1C120E0E, 0xE0907070,0x7C423E3E,0x71C4B5B5,0xCCAA6666,0x90D84848,0x06050303,0xF701F6F6,0x1C120E0E,
0xC2A36161,0x6A5F3535,0xAEF95757,0x69D0B9B9,0x17918686,0x9958C1C1,0x3A271D1D,0x27B99E9E, 0xC2A36161,0x6A5F3535,0xAEF95757,0x69D0B9B9,0x17918686,0x9958C1C1,0x3A271D1D,0x27B99E9E,
0xD938E1E1,0xEB13F8F8,0x2BB39898,0x22331111,0xD2BB6969,0xA970D9D9,0x07898E8E,0x33A79494, 0xD938E1E1,0xEB13F8F8,0x2BB39898,0x22331111,0xD2BB6969,0xA970D9D9,0x07898E8E,0x33A79494,
0x2DB69B9B,0x3C221E1E,0x15928787,0xC920E9E9,0x8749CECE,0xAAFF5555,0x50782828,0xA57ADFDF, 0x2DB69B9B,0x3C221E1E,0x15928787,0xC920E9E9,0x8749CECE,0xAAFF5555,0x50782828,0xA57ADFDF,
0x038F8C8C,0x59F8A1A1,0x09808989,0x1A170D0D,0x65DABFBF,0xD731E6E6,0x84C64242,0xD0B86868, 0x038F8C8C,0x59F8A1A1,0x09808989,0x1A170D0D,0x65DABFBF,0xD731E6E6,0x84C64242,0xD0B86868,
0x82C34141,0x29B09999,0x5A772D2D,0x1E110F0F,0x7BCBB0B0,0xA8FC5454,0x6DD6BBBB,0x2C3A1616 0x82C34141,0x29B09999,0x5A772D2D,0x1E110F0F,0x7BCBB0B0,0xA8FC5454,0x6DD6BBBB,0x2C3A1616
} }
}; };
static uint32_t fl_tab[4][256] = static uint32_t fl_tab[4][256] =
{ {
{ {
0x00000063,0x0000007C,0x00000077,0x0000007B,0x000000F2,0x0000006B,0x0000006F,0x000000C5, 0x00000063,0x0000007C,0x00000077,0x0000007B,0x000000F2,0x0000006B,0x0000006F,0x000000C5,
0x00000030,0x00000001,0x00000067,0x0000002B,0x000000FE,0x000000D7,0x000000AB,0x00000076, 0x00000030,0x00000001,0x00000067,0x0000002B,0x000000FE,0x000000D7,0x000000AB,0x00000076,
0x000000CA,0x00000082,0x000000C9,0x0000007D,0x000000FA,0x00000059,0x00000047,0x000000F0, 0x000000CA,0x00000082,0x000000C9,0x0000007D,0x000000FA,0x00000059,0x00000047,0x000000F0,
0x000000AD,0x000000D4,0x000000A2,0x000000AF,0x0000009C,0x000000A4,0x00000072,0x000000C0, 0x000000AD,0x000000D4,0x000000A2,0x000000AF,0x0000009C,0x000000A4,0x00000072,0x000000C0,
0x000000B7,0x000000FD,0x00000093,0x00000026,0x00000036,0x0000003F,0x000000F7,0x000000CC, 0x000000B7,0x000000FD,0x00000093,0x00000026,0x00000036,0x0000003F,0x000000F7,0x000000CC,
0x00000034,0x000000A5,0x000000E5,0x000000F1,0x00000071,0x000000D8,0x00000031,0x00000015, 0x00000034,0x000000A5,0x000000E5,0x000000F1,0x00000071,0x000000D8,0x00000031,0x00000015,
0x00000004,0x000000C7,0x00000023,0x000000C3,0x00000018,0x00000096,0x00000005,0x0000009A, 0x00000004,0x000000C7,0x00000023,0x000000C3,0x00000018,0x00000096,0x00000005,0x0000009A,
0x00000007,0x00000012,0x00000080,0x000000E2,0x000000EB,0x00000027,0x000000B2,0x00000075, 0x00000007,0x00000012,0x00000080,0x000000E2,0x000000EB,0x00000027,0x000000B2,0x00000075,
0x00000009,0x00000083,0x0000002C,0x0000001A,0x0000001B,0x0000006E,0x0000005A,0x000000A0, 0x00000009,0x00000083,0x0000002C,0x0000001A,0x0000001B,0x0000006E,0x0000005A,0x000000A0,
0x00000052,0x0000003B,0x000000D6,0x000000B3,0x00000029,0x000000E3,0x0000002F,0x00000084, 0x00000052,0x0000003B,0x000000D6,0x000000B3,0x00000029,0x000000E3,0x0000002F,0x00000084,
0x00000053,0x000000D1,0x00000000,0x000000ED,0x00000020,0x000000FC,0x000000B1,0x0000005B, 0x00000053,0x000000D1,0x00000000,0x000000ED,0x00000020,0x000000FC,0x000000B1,0x0000005B,
0x0000006A,0x000000CB,0x000000BE,0x00000039,0x0000004A,0x0000004C,0x00000058,0x000000CF, 0x0000006A,0x000000CB,0x000000BE,0x00000039,0x0000004A,0x0000004C,0x00000058,0x000000CF,
0x000000D0,0x000000EF,0x000000AA,0x000000FB,0x00000043,0x0000004D,0x00000033,0x00000085, 0x000000D0,0x000000EF,0x000000AA,0x000000FB,0x00000043,0x0000004D,0x00000033,0x00000085,
0x00000045,0x000000F9,0x00000002,0x0000007F,0x00000050,0x0000003C,0x0000009F,0x000000A8, 0x00000045,0x000000F9,0x00000002,0x0000007F,0x00000050,0x0000003C,0x0000009F,0x000000A8,
0x00000051,0x000000A3,0x00000040,0x0000008F,0x00000092,0x0000009D,0x00000038,0x000000F5, 0x00000051,0x000000A3,0x00000040,0x0000008F,0x00000092,0x0000009D,0x00000038,0x000000F5,
0x000000BC,0x000000B6,0x000000DA,0x00000021,0x00000010,0x000000FF,0x000000F3,0x000000D2, 0x000000BC,0x000000B6,0x000000DA,0x00000021,0x00000010,0x000000FF,0x000000F3,0x000000D2,
0x000000CD,0x0000000C,0x00000013,0x000000EC,0x0000005F,0x00000097,0x00000044,0x00000017, 0x000000CD,0x0000000C,0x00000013,0x000000EC,0x0000005F,0x00000097,0x00000044,0x00000017,
0x000000C4,0x000000A7,0x0000007E,0x0000003D,0x00000064,0x0000005D,0x00000019,0x00000073, 0x000000C4,0x000000A7,0x0000007E,0x0000003D,0x00000064,0x0000005D,0x00000019,0x00000073,
0x00000060,0x00000081,0x0000004F,0x000000DC,0x00000022,0x0000002A,0x00000090,0x00000088, 0x00000060,0x00000081,0x0000004F,0x000000DC,0x00000022,0x0000002A,0x00000090,0x00000088,
0x00000046,0x000000EE,0x000000B8,0x00000014,0x000000DE,0x0000005E,0x0000000B,0x000000DB, 0x00000046,0x000000EE,0x000000B8,0x00000014,0x000000DE,0x0000005E,0x0000000B,0x000000DB,
0x000000E0,0x00000032,0x0000003A,0x0000000A,0x00000049,0x00000006,0x00000024,0x0000005C, 0x000000E0,0x00000032,0x0000003A,0x0000000A,0x00000049,0x00000006,0x00000024,0x0000005C,
0x000000C2,0x000000D3,0x000000AC,0x00000062,0x00000091,0x00000095,0x000000E4,0x00000079, 0x000000C2,0x000000D3,0x000000AC,0x00000062,0x00000091,0x00000095,0x000000E4,0x00000079,
0x000000E7,0x000000C8,0x00000037,0x0000006D,0x0000008D,0x000000D5,0x0000004E,0x000000A9, 0x000000E7,0x000000C8,0x00000037,0x0000006D,0x0000008D,0x000000D5,0x0000004E,0x000000A9,
0x0000006C,0x00000056,0x000000F4,0x000000EA,0x00000065,0x0000007A,0x000000AE,0x00000008, 0x0000006C,0x00000056,0x000000F4,0x000000EA,0x00000065,0x0000007A,0x000000AE,0x00000008,
0x000000BA,0x00000078,0x00000025,0x0000002E,0x0000001C,0x000000A6,0x000000B4,0x000000C6, 0x000000BA,0x00000078,0x00000025,0x0000002E,0x0000001C,0x000000A6,0x000000B4,0x000000C6,
0x000000E8,0x000000DD,0x00000074,0x0000001F,0x0000004B,0x000000BD,0x0000008B,0x0000008A, 0x000000E8,0x000000DD,0x00000074,0x0000001F,0x0000004B,0x000000BD,0x0000008B,0x0000008A,
0x00000070,0x0000003E,0x000000B5,0x00000066,0x00000048,0x00000003,0x000000F6,0x0000000E, 0x00000070,0x0000003E,0x000000B5,0x00000066,0x00000048,0x00000003,0x000000F6,0x0000000E,
0x00000061,0x00000035,0x00000057,0x000000B9,0x00000086,0x000000C1,0x0000001D,0x0000009E, 0x00000061,0x00000035,0x00000057,0x000000B9,0x00000086,0x000000C1,0x0000001D,0x0000009E,
0x000000E1,0x000000F8,0x00000098,0x00000011,0x00000069,0x000000D9,0x0000008E,0x00000094, 0x000000E1,0x000000F8,0x00000098,0x00000011,0x00000069,0x000000D9,0x0000008E,0x00000094,
0x0000009B,0x0000001E,0x00000087,0x000000E9,0x000000CE,0x00000055,0x00000028,0x000000DF, 0x0000009B,0x0000001E,0x00000087,0x000000E9,0x000000CE,0x00000055,0x00000028,0x000000DF,
0x0000008C,0x000000A1,0x00000089,0x0000000D,0x000000BF,0x000000E6,0x00000042,0x00000068, 0x0000008C,0x000000A1,0x00000089,0x0000000D,0x000000BF,0x000000E6,0x00000042,0x00000068,
0x00000041,0x00000099,0x0000002D,0x0000000F,0x000000B0,0x00000054,0x000000BB,0x00000016 0x00000041,0x00000099,0x0000002D,0x0000000F,0x000000B0,0x00000054,0x000000BB,0x00000016
}, },
{ {
0x00006300,0x00007C00,0x00007700,0x00007B00,0x0000F200,0x00006B00,0x00006F00,0x0000C500, 0x00006300,0x00007C00,0x00007700,0x00007B00,0x0000F200,0x00006B00,0x00006F00,0x0000C500,
0x00003000,0x00000100,0x00006700,0x00002B00,0x0000FE00,0x0000D700,0x0000AB00,0x00007600, 0x00003000,0x00000100,0x00006700,0x00002B00,0x0000FE00,0x0000D700,0x0000AB00,0x00007600,
0x0000CA00,0x00008200,0x0000C900,0x00007D00,0x0000FA00,0x00005900,0x00004700,0x0000F000, 0x0000CA00,0x00008200,0x0000C900,0x00007D00,0x0000FA00,0x00005900,0x00004700,0x0000F000,
0x0000AD00,0x0000D400,0x0000A200,0x0000AF00,0x00009C00,0x0000A400,0x00007200,0x0000C000, 0x0000AD00,0x0000D400,0x0000A200,0x0000AF00,0x00009C00,0x0000A400,0x00007200,0x0000C000,
0x0000B700,0x0000FD00,0x00009300,0x00002600,0x00003600,0x00003F00,0x0000F700,0x0000CC00, 0x0000B700,0x0000FD00,0x00009300,0x00002600,0x00003600,0x00003F00,0x0000F700,0x0000CC00,
0x00003400,0x0000A500,0x0000E500,0x0000F100,0x00007100,0x0000D800,0x00003100,0x00001500, 0x00003400,0x0000A500,0x0000E500,0x0000F100,0x00007100,0x0000D800,0x00003100,0x00001500,
0x00000400,0x0000C700,0x00002300,0x0000C300,0x00001800,0x00009600,0x00000500,0x00009A00, 0x00000400,0x0000C700,0x00002300,0x0000C300,0x00001800,0x00009600,0x00000500,0x00009A00,
0x00000700,0x00001200,0x00008000,0x0000E200,0x0000EB00,0x00002700,0x0000B200,0x00007500, 0x00000700,0x00001200,0x00008000,0x0000E200,0x0000EB00,0x00002700,0x0000B200,0x00007500,
0x00000900,0x00008300,0x00002C00,0x00001A00,0x00001B00,0x00006E00,0x00005A00,0x0000A000, 0x00000900,0x00008300,0x00002C00,0x00001A00,0x00001B00,0x00006E00,0x00005A00,0x0000A000,
0x00005200,0x00003B00,0x0000D600,0x0000B300,0x00002900,0x0000E300,0x00002F00,0x00008400, 0x00005200,0x00003B00,0x0000D600,0x0000B300,0x00002900,0x0000E300,0x00002F00,0x00008400,
0x00005300,0x0000D100,0000000000,0x0000ED00,0x00002000,0x0000FC00,0x0000B100,0x00005B00, 0x00005300,0x0000D100,0000000000,0x0000ED00,0x00002000,0x0000FC00,0x0000B100,0x00005B00,
0x00006A00,0x0000CB00,0x0000BE00,0x00003900,0x00004A00,0x00004C00,0x00005800,0x0000CF00, 0x00006A00,0x0000CB00,0x0000BE00,0x00003900,0x00004A00,0x00004C00,0x00005800,0x0000CF00,
0x0000D000,0x0000EF00,0x0000AA00,0x0000FB00,0x00004300,0x00004D00,0x00003300,0x00008500, 0x0000D000,0x0000EF00,0x0000AA00,0x0000FB00,0x00004300,0x00004D00,0x00003300,0x00008500,
0x00004500,0x0000F900,0x00000200,0x00007F00,0x00005000,0x00003C00,0x00009F00,0x0000A800, 0x00004500,0x0000F900,0x00000200,0x00007F00,0x00005000,0x00003C00,0x00009F00,0x0000A800,
0x00005100,0x0000A300,0x00004000,0x00008F00,0x00009200,0x00009D00,0x00003800,0x0000F500, 0x00005100,0x0000A300,0x00004000,0x00008F00,0x00009200,0x00009D00,0x00003800,0x0000F500,
0x0000BC00,0x0000B600,0x0000DA00,0x00002100,0x00001000,0x0000FF00,0x0000F300,0x0000D200, 0x0000BC00,0x0000B600,0x0000DA00,0x00002100,0x00001000,0x0000FF00,0x0000F300,0x0000D200,
0x0000CD00,0x00000C00,0x00001300,0x0000EC00,0x00005F00,0x00009700,0x00004400,0x00001700, 0x0000CD00,0x00000C00,0x00001300,0x0000EC00,0x00005F00,0x00009700,0x00004400,0x00001700,
0x0000C400,0x0000A700,0x00007E00,0x00003D00,0x00006400,0x00005D00,0x00001900,0x00007300, 0x0000C400,0x0000A700,0x00007E00,0x00003D00,0x00006400,0x00005D00,0x00001900,0x00007300,
0x00006000,0x00008100,0x00004F00,0x0000DC00,0x00002200,0x00002A00,0x00009000,0x00008800, 0x00006000,0x00008100,0x00004F00,0x0000DC00,0x00002200,0x00002A00,0x00009000,0x00008800,
0x00004600,0x0000EE00,0x0000B800,0x00001400,0x0000DE00,0x00005E00,0x00000B00,0x0000DB00, 0x00004600,0x0000EE00,0x0000B800,0x00001400,0x0000DE00,0x00005E00,0x00000B00,0x0000DB00,
0x0000E000,0x00003200,0x00003A00,0x00000A00,0x00004900,0x00000600,0x00002400,0x00005C00, 0x0000E000,0x00003200,0x00003A00,0x00000A00,0x00004900,0x00000600,0x00002400,0x00005C00,
0x0000C200,0x0000D300,0x0000AC00,0x00006200,0x00009100,0x00009500,0x0000E400,0x00007900, 0x0000C200,0x0000D300,0x0000AC00,0x00006200,0x00009100,0x00009500,0x0000E400,0x00007900,
0x0000E700,0x0000C800,0x00003700,0x00006D00,0x00008D00,0x0000D500,0x00004E00,0x0000A900, 0x0000E700,0x0000C800,0x00003700,0x00006D00,0x00008D00,0x0000D500,0x00004E00,0x0000A900,
0x00006C00,0x00005600,0x0000F400,0x0000EA00,0x00006500,0x00007A00,0x0000AE00,0x00000800, 0x00006C00,0x00005600,0x0000F400,0x0000EA00,0x00006500,0x00007A00,0x0000AE00,0x00000800,
0x0000BA00,0x00007800,0x00002500,0x00002E00,0x00001C00,0x0000A600,0x0000B400,0x0000C600, 0x0000BA00,0x00007800,0x00002500,0x00002E00,0x00001C00,0x0000A600,0x0000B400,0x0000C600,
0x0000E800,0x0000DD00,0x00007400,0x00001F00,0x00004B00,0x0000BD00,0x00008B00,0x00008A00, 0x0000E800,0x0000DD00,0x00007400,0x00001F00,0x00004B00,0x0000BD00,0x00008B00,0x00008A00,
0x00007000,0x00003E00,0x0000B500,0x00006600,0x00004800,0x00000300,0x0000F600,0x00000E00, 0x00007000,0x00003E00,0x0000B500,0x00006600,0x00004800,0x00000300,0x0000F600,0x00000E00,
0x00006100,0x00003500,0x00005700,0x0000B900,0x00008600,0x0000C100,0x00001D00,0x00009E00, 0x00006100,0x00003500,0x00005700,0x0000B900,0x00008600,0x0000C100,0x00001D00,0x00009E00,
0x0000E100,0x0000F800,0x00009800,0x00001100,0x00006900,0x0000D900,0x00008E00,0x00009400, 0x0000E100,0x0000F800,0x00009800,0x00001100,0x00006900,0x0000D900,0x00008E00,0x00009400,
0x00009B00,0x00001E00,0x00008700,0x0000E900,0x0000CE00,0x00005500,0x00002800,0x0000DF00, 0x00009B00,0x00001E00,0x00008700,0x0000E900,0x0000CE00,0x00005500,0x00002800,0x0000DF00,
0x00008C00,0x0000A100,0x00008900,0x00000D00,0x0000BF00,0x0000E600,0x00004200,0x00006800, 0x00008C00,0x0000A100,0x00008900,0x00000D00,0x0000BF00,0x0000E600,0x00004200,0x00006800,
0x00004100,0x00009900,0x00002D00,0x00000F00,0x0000B000,0x00005400,0x0000BB00,0x00001600 0x00004100,0x00009900,0x00002D00,0x00000F00,0x0000B000,0x00005400,0x0000BB00,0x00001600
}, },
{ {
0x00630000,0x007C0000,0x00770000,0x007B0000,0x00F20000,0x006B0000,0x006F0000,0x00C50000, 0x00630000,0x007C0000,0x00770000,0x007B0000,0x00F20000,0x006B0000,0x006F0000,0x00C50000,
0x00300000,0x00010000,0x00670000,0x002B0000,0x00FE0000,0x00D70000,0x00AB0000,0x00760000, 0x00300000,0x00010000,0x00670000,0x002B0000,0x00FE0000,0x00D70000,0x00AB0000,0x00760000,
0x00CA0000,0x00820000,0x00C90000,0x007D0000,0x00FA0000,0x00590000,0x00470000,0x00F00000, 0x00CA0000,0x00820000,0x00C90000,0x007D0000,0x00FA0000,0x00590000,0x00470000,0x00F00000,
0x00AD0000,0x00D40000,0x00A20000,0x00AF0000,0x009C0000,0x00A40000,0x00720000,0x00C00000, 0x00AD0000,0x00D40000,0x00A20000,0x00AF0000,0x009C0000,0x00A40000,0x00720000,0x00C00000,
0x00B70000,0x00FD0000,0x00930000,0x00260000,0x00360000,0x003F0000,0x00F70000,0x00CC0000, 0x00B70000,0x00FD0000,0x00930000,0x00260000,0x00360000,0x003F0000,0x00F70000,0x00CC0000,
0x00340000,0x00A50000,0x00E50000,0x00F10000,0x00710000,0x00D80000,0x00310000,0x00150000, 0x00340000,0x00A50000,0x00E50000,0x00F10000,0x00710000,0x00D80000,0x00310000,0x00150000,
0x00040000,0x00C70000,0x00230000,0x00C30000,0x00180000,0x00960000,0x00050000,0x009A0000, 0x00040000,0x00C70000,0x00230000,0x00C30000,0x00180000,0x00960000,0x00050000,0x009A0000,
0x00070000,0x00120000,0x00800000,0x00E20000,0x00EB0000,0x00270000,0x00B20000,0x00750000, 0x00070000,0x00120000,0x00800000,0x00E20000,0x00EB0000,0x00270000,0x00B20000,0x00750000,
0x00090000,0x00830000,0x002C0000,0x001A0000,0x001B0000,0x006E0000,0x005A0000,0x00A00000, 0x00090000,0x00830000,0x002C0000,0x001A0000,0x001B0000,0x006E0000,0x005A0000,0x00A00000,
0x00520000,0x003B0000,0x00D60000,0x00B30000,0x00290000,0x00E30000,0x002F0000,0x00840000, 0x00520000,0x003B0000,0x00D60000,0x00B30000,0x00290000,0x00E30000,0x002F0000,0x00840000,
0x00530000,0x00D10000,0000000000,0x00ED0000,0x00200000,0x00FC0000,0x00B10000,0x005B0000, 0x00530000,0x00D10000,0000000000,0x00ED0000,0x00200000,0x00FC0000,0x00B10000,0x005B0000,
0x006A0000,0x00CB0000,0x00BE0000,0x00390000,0x004A0000,0x004C0000,0x00580000,0x00CF0000, 0x006A0000,0x00CB0000,0x00BE0000,0x00390000,0x004A0000,0x004C0000,0x00580000,0x00CF0000,
0x00D00000,0x00EF0000,0x00AA0000,0x00FB0000,0x00430000,0x004D0000,0x00330000,0x00850000, 0x00D00000,0x00EF0000,0x00AA0000,0x00FB0000,0x00430000,0x004D0000,0x00330000,0x00850000,
0x00450000,0x00F90000,0x00020000,0x007F0000,0x00500000,0x003C0000,0x009F0000,0x00A80000, 0x00450000,0x00F90000,0x00020000,0x007F0000,0x00500000,0x003C0000,0x009F0000,0x00A80000,
0x00510000,0x00A30000,0x00400000,0x008F0000,0x00920000,0x009D0000,0x00380000,0x00F50000, 0x00510000,0x00A30000,0x00400000,0x008F0000,0x00920000,0x009D0000,0x00380000,0x00F50000,
0x00BC0000,0x00B60000,0x00DA0000,0x00210000,0x00100000,0x00FF0000,0x00F30000,0x00D20000, 0x00BC0000,0x00B60000,0x00DA0000,0x00210000,0x00100000,0x00FF0000,0x00F30000,0x00D20000,
0x00CD0000,0x000C0000,0x00130000,0x00EC0000,0x005F0000,0x00970000,0x00440000,0x00170000, 0x00CD0000,0x000C0000,0x00130000,0x00EC0000,0x005F0000,0x00970000,0x00440000,0x00170000,
0x00C40000,0x00A70000,0x007E0000,0x003D0000,0x00640000,0x005D0000,0x00190000,0x00730000, 0x00C40000,0x00A70000,0x007E0000,0x003D0000,0x00640000,0x005D0000,0x00190000,0x00730000,
0x00600000,0x00810000,0x004F0000,0x00DC0000,0x00220000,0x002A0000,0x00900000,0x00880000, 0x00600000,0x00810000,0x004F0000,0x00DC0000,0x00220000,0x002A0000,0x00900000,0x00880000,
0x00460000,0x00EE0000,0x00B80000,0x00140000,0x00DE0000,0x005E0000,0x000B0000,0x00DB0000, 0x00460000,0x00EE0000,0x00B80000,0x00140000,0x00DE0000,0x005E0000,0x000B0000,0x00DB0000,
0x00E00000,0x00320000,0x003A0000,0x000A0000,0x00490000,0x00060000,0x00240000,0x005C0000, 0x00E00000,0x00320000,0x003A0000,0x000A0000,0x00490000,0x00060000,0x00240000,0x005C0000,
0x00C20000,0x00D30000,0x00AC0000,0x00620000,0x00910000,0x00950000,0x00E40000,0x00790000, 0x00C20000,0x00D30000,0x00AC0000,0x00620000,0x00910000,0x00950000,0x00E40000,0x00790000,
0x00E70000,0x00C80000,0x00370000,0x006D0000,0x008D0000,0x00D50000,0x004E0000,0x00A90000, 0x00E70000,0x00C80000,0x00370000,0x006D0000,0x008D0000,0x00D50000,0x004E0000,0x00A90000,
0x006C0000,0x00560000,0x00F40000,0x00EA0000,0x00650000,0x007A0000,0x00AE0000,0x00080000, 0x006C0000,0x00560000,0x00F40000,0x00EA0000,0x00650000,0x007A0000,0x00AE0000,0x00080000,
0x00BA0000,0x00780000,0x00250000,0x002E0000,0x001C0000,0x00A60000,0x00B40000,0x00C60000, 0x00BA0000,0x00780000,0x00250000,0x002E0000,0x001C0000,0x00A60000,0x00B40000,0x00C60000,
0x00E80000,0x00DD0000,0x00740000,0x001F0000,0x004B0000,0x00BD0000,0x008B0000,0x008A0000, 0x00E80000,0x00DD0000,0x00740000,0x001F0000,0x004B0000,0x00BD0000,0x008B0000,0x008A0000,
0x00700000,0x003E0000,0x00B50000,0x00660000,0x00480000,0x00030000,0x00F60000,0x000E0000, 0x00700000,0x003E0000,0x00B50000,0x00660000,0x00480000,0x00030000,0x00F60000,0x000E0000,
0x00610000,0x00350000,0x00570000,0x00B90000,0x00860000,0x00C10000,0x001D0000,0x009E0000, 0x00610000,0x00350000,0x00570000,0x00B90000,0x00860000,0x00C10000,0x001D0000,0x009E0000,
0x00E10000,0x00F80000,0x00980000,0x00110000,0x00690000,0x00D90000,0x008E0000,0x00940000, 0x00E10000,0x00F80000,0x00980000,0x00110000,0x00690000,0x00D90000,0x008E0000,0x00940000,
0x009B0000,0x001E0000,0x00870000,0x00E90000,0x00CE0000,0x00550000,0x00280000,0x00DF0000, 0x009B0000,0x001E0000,0x00870000,0x00E90000,0x00CE0000,0x00550000,0x00280000,0x00DF0000,
0x008C0000,0x00A10000,0x00890000,0x000D0000,0x00BF0000,0x00E60000,0x00420000,0x00680000, 0x008C0000,0x00A10000,0x00890000,0x000D0000,0x00BF0000,0x00E60000,0x00420000,0x00680000,
0x00410000,0x00990000,0x002D0000,0x000F0000,0x00B00000,0x00540000,0x00BB0000,0x00160000 0x00410000,0x00990000,0x002D0000,0x000F0000,0x00B00000,0x00540000,0x00BB0000,0x00160000
}, },
{ {
0x63000000,0x7C000000,0x77000000,0x7B000000,0xF2000000,0x6B000000,0x6F000000,0xC5000000, 0x63000000,0x7C000000,0x77000000,0x7B000000,0xF2000000,0x6B000000,0x6F000000,0xC5000000,
0x30000000,0x01000000,0x67000000,0x2B000000,0xFE000000,0xD7000000,0xAB000000,0x76000000, 0x30000000,0x01000000,0x67000000,0x2B000000,0xFE000000,0xD7000000,0xAB000000,0x76000000,
0xCA000000,0x82000000,0xC9000000,0x7D000000,0xFA000000,0x59000000,0x47000000,0xF0000000, 0xCA000000,0x82000000,0xC9000000,0x7D000000,0xFA000000,0x59000000,0x47000000,0xF0000000,
0xAD000000,0xD4000000,0xA2000000,0xAF000000,0x9C000000,0xA4000000,0x72000000,0xC0000000, 0xAD000000,0xD4000000,0xA2000000,0xAF000000,0x9C000000,0xA4000000,0x72000000,0xC0000000,
0xB7000000,0xFD000000,0x93000000,0x26000000,0x36000000,0x3F000000,0xF7000000,0xCC000000, 0xB7000000,0xFD000000,0x93000000,0x26000000,0x36000000,0x3F000000,0xF7000000,0xCC000000,
0x34000000,0xA5000000,0xE5000000,0xF1000000,0x71000000,0xD8000000,0x31000000,0x15000000, 0x34000000,0xA5000000,0xE5000000,0xF1000000,0x71000000,0xD8000000,0x31000000,0x15000000,
0x04000000,0xC7000000,0x23000000,0xC3000000,0x18000000,0x96000000,0x05000000,0x9A000000, 0x04000000,0xC7000000,0x23000000,0xC3000000,0x18000000,0x96000000,0x05000000,0x9A000000,
0x07000000,0x12000000,0x80000000,0xE2000000,0xEB000000,0x27000000,0xB2000000,0x75000000, 0x07000000,0x12000000,0x80000000,0xE2000000,0xEB000000,0x27000000,0xB2000000,0x75000000,
0x09000000,0x83000000,0x2C000000,0x1A000000,0x1B000000,0x6E000000,0x5A000000,0xA0000000, 0x09000000,0x83000000,0x2C000000,0x1A000000,0x1B000000,0x6E000000,0x5A000000,0xA0000000,
0x52000000,0x3B000000,0xD6000000,0xB3000000,0x29000000,0xE3000000,0x2F000000,0x84000000, 0x52000000,0x3B000000,0xD6000000,0xB3000000,0x29000000,0xE3000000,0x2F000000,0x84000000,
0x53000000,0xD1000000,0000000000,0xED000000,0x20000000,0xFC000000,0xB1000000,0x5B000000, 0x53000000,0xD1000000,0000000000,0xED000000,0x20000000,0xFC000000,0xB1000000,0x5B000000,
0x6A000000,0xCB000000,0xBE000000,0x39000000,0x4A000000,0x4C000000,0x58000000,0xCF000000, 0x6A000000,0xCB000000,0xBE000000,0x39000000,0x4A000000,0x4C000000,0x58000000,0xCF000000,
0xD0000000,0xEF000000,0xAA000000,0xFB000000,0x43000000,0x4D000000,0x33000000,0x85000000, 0xD0000000,0xEF000000,0xAA000000,0xFB000000,0x43000000,0x4D000000,0x33000000,0x85000000,
0x45000000,0xF9000000,0x02000000,0x7F000000,0x50000000,0x3C000000,0x9F000000,0xA8000000, 0x45000000,0xF9000000,0x02000000,0x7F000000,0x50000000,0x3C000000,0x9F000000,0xA8000000,
0x51000000,0xA3000000,0x40000000,0x8F000000,0x92000000,0x9D000000,0x38000000,0xF5000000, 0x51000000,0xA3000000,0x40000000,0x8F000000,0x92000000,0x9D000000,0x38000000,0xF5000000,
0xBC000000,0xB6000000,0xDA000000,0x21000000,0x10000000,0xFF000000,0xF3000000,0xD2000000, 0xBC000000,0xB6000000,0xDA000000,0x21000000,0x10000000,0xFF000000,0xF3000000,0xD2000000,
0xCD000000,0x0C000000,0x13000000,0xEC000000,0x5F000000,0x97000000,0x44000000,0x17000000, 0xCD000000,0x0C000000,0x13000000,0xEC000000,0x5F000000,0x97000000,0x44000000,0x17000000,
0xC4000000,0xA7000000,0x7E000000,0x3D000000,0x64000000,0x5D000000,0x19000000,0x73000000, 0xC4000000,0xA7000000,0x7E000000,0x3D000000,0x64000000,0x5D000000,0x19000000,0x73000000,
0x60000000,0x81000000,0x4F000000,0xDC000000,0x22000000,0x2A000000,0x90000000,0x88000000, 0x60000000,0x81000000,0x4F000000,0xDC000000,0x22000000,0x2A000000,0x90000000,0x88000000,
0x46000000,0xEE000000,0xB8000000,0x14000000,0xDE000000,0x5E000000,0x0B000000,0xDB000000, 0x46000000,0xEE000000,0xB8000000,0x14000000,0xDE000000,0x5E000000,0x0B000000,0xDB000000,
0xE0000000,0x32000000,0x3A000000,0x0A000000,0x49000000,0x06000000,0x24000000,0x5C000000, 0xE0000000,0x32000000,0x3A000000,0x0A000000,0x49000000,0x06000000,0x24000000,0x5C000000,
0xC2000000,0xD3000000,0xAC000000,0x62000000,0x91000000,0x95000000,0xE4000000,0x79000000, 0xC2000000,0xD3000000,0xAC000000,0x62000000,0x91000000,0x95000000,0xE4000000,0x79000000,
0xE7000000,0xC8000000,0x37000000,0x6D000000,0x8D000000,0xD5000000,0x4E000000,0xA9000000, 0xE7000000,0xC8000000,0x37000000,0x6D000000,0x8D000000,0xD5000000,0x4E000000,0xA9000000,
0x6C000000,0x56000000,0xF4000000,0xEA000000,0x65000000,0x7A000000,0xAE000000,0x08000000, 0x6C000000,0x56000000,0xF4000000,0xEA000000,0x65000000,0x7A000000,0xAE000000,0x08000000,
0xBA000000,0x78000000,0x25000000,0x2E000000,0x1C000000,0xA6000000,0xB4000000,0xC6000000, 0xBA000000,0x78000000,0x25000000,0x2E000000,0x1C000000,0xA6000000,0xB4000000,0xC6000000,
0xE8000000,0xDD000000,0x74000000,0x1F000000,0x4B000000,0xBD000000,0x8B000000,0x8A000000, 0xE8000000,0xDD000000,0x74000000,0x1F000000,0x4B000000,0xBD000000,0x8B000000,0x8A000000,
0x70000000,0x3E000000,0xB5000000,0x66000000,0x48000000,0x03000000,0xF6000000,0x0E000000, 0x70000000,0x3E000000,0xB5000000,0x66000000,0x48000000,0x03000000,0xF6000000,0x0E000000,
0x61000000,0x35000000,0x57000000,0xB9000000,0x86000000,0xC1000000,0x1D000000,0x9E000000, 0x61000000,0x35000000,0x57000000,0xB9000000,0x86000000,0xC1000000,0x1D000000,0x9E000000,
0xE1000000,0xF8000000,0x98000000,0x11000000,0x69000000,0xD9000000,0x8E000000,0x94000000, 0xE1000000,0xF8000000,0x98000000,0x11000000,0x69000000,0xD9000000,0x8E000000,0x94000000,
0x9B000000,0x1E000000,0x87000000,0xE9000000,0xCE000000,0x55000000,0x28000000,0xDF000000, 0x9B000000,0x1E000000,0x87000000,0xE9000000,0xCE000000,0x55000000,0x28000000,0xDF000000,
0x8C000000,0xA1000000,0x89000000,0x0D000000,0xBF000000,0xE6000000,0x42000000,0x68000000, 0x8C000000,0xA1000000,0x89000000,0x0D000000,0xBF000000,0xE6000000,0x42000000,0x68000000,
0x41000000,0x99000000,0x2D000000,0x0F000000,0xB0000000,0x54000000,0xBB000000,0x16000000 0x41000000,0x99000000,0x2D000000,0x0F000000,0xB0000000,0x54000000,0xBB000000,0x16000000
} }
}; };
/*----------------- The workspace ------------------------------*/ /*----------------- The workspace ------------------------------*/
static uint32_t Ekey[44]; /* The expanded key */ static uint32_t Ekey[44]; /* The expanded key */
/*------ The round Function. 4 table lookups and 4 Exors ------*/ /*------ The round Function. 4 table lookups and 4 Exors ------*/
#define f_rnd(x, n) \ #define f_rnd(x, n) \
( ft_tab[0][byte0(x[n])] \ ( ft_tab[0][byte0(x[n])] \
^ ft_tab[1][byte1(x[(n + 1) & 3])] \ ^ ft_tab[1][byte1(x[(n + 1) & 3])] \
^ ft_tab[2][byte2(x[(n + 2) & 3])] \ ^ ft_tab[2][byte2(x[(n + 2) & 3])] \
^ ft_tab[3][byte3(x[(n + 3) & 3])] ) ^ ft_tab[3][byte3(x[(n + 3) & 3])] )
#define f_round(bo, bi, k) \ #define f_round(bo, bi, k) \
bo[0] = f_rnd(bi, 0) ^ k[0]; \ bo[0] = f_rnd(bi, 0) ^ k[0]; \
bo[1] = f_rnd(bi, 1) ^ k[1]; \ bo[1] = f_rnd(bi, 1) ^ k[1]; \
bo[2] = f_rnd(bi, 2) ^ k[2]; \ bo[2] = f_rnd(bi, 2) ^ k[2]; \
bo[3] = f_rnd(bi, 3) ^ k[3]; \ bo[3] = f_rnd(bi, 3) ^ k[3]; \
k += 4 k += 4
/*--- The S Box lookup used in constructing the Key schedule ---*/ /*--- The S Box lookup used in constructing the Key schedule ---*/
#define ls_box(x) \ #define ls_box(x) \
( fl_tab[0][byte0(x)] \ ( fl_tab[0][byte0(x)] \
^ fl_tab[1][byte1(x)] \ ^ fl_tab[1][byte1(x)] \
^ fl_tab[2][byte2(x)] \ ^ fl_tab[2][byte2(x)] \
^ fl_tab[3][byte3(x)] ) ^ fl_tab[3][byte3(x)] )
/*------------ The last round function (no MixColumn) ----------*/ /*------------ The last round function (no MixColumn) ----------*/
#define lf_rnd(x, n) \ #define lf_rnd(x, n) \
( fl_tab[0][byte0(x[n])] \ ( fl_tab[0][byte0(x[n])] \
^ fl_tab[1][byte1(x[(n + 1) & 3])] \ ^ fl_tab[1][byte1(x[(n + 1) & 3])] \
^ fl_tab[2][byte2(x[(n + 2) & 3])] \ ^ fl_tab[2][byte2(x[(n + 2) & 3])] \
^ fl_tab[3][byte3(x[(n + 3) & 3])] ) ^ fl_tab[3][byte3(x[(n + 3) & 3])] )
/*----------------------------------------------------------- /*-----------------------------------------------------------
* RijndaelKeySchedule * RijndaelKeySchedule
* Initialise the key schedule from a supplied key * Initialise the key schedule from a supplied key
*/ */
void RijndaelKeySchedule(uint8_t key[16]) void RijndaelKeySchedule(uint8_t key[16])
{ {
uint32_t t; uint32_t t;
uint32_t *ek=Ekey, /* pointer to the expanded key */ uint32_t *ek=Ekey, /* pointer to the expanded key */
*rc=rnd_con; /* pointer to the round constant */ *rc=rnd_con; /* pointer to the round constant */
Ekey[0] = u32_in(key ); Ekey[0] = u32_in(key );
Ekey[1] = u32_in(key + 4); Ekey[1] = u32_in(key + 4);
Ekey[2] = u32_in(key + 8); Ekey[2] = u32_in(key + 8);
Ekey[3] = u32_in(key + 12); Ekey[3] = u32_in(key + 12);
while(ek < Ekey + 40) while(ek < Ekey + 40)
{ {
t = rot3(ek[3]); t = rot3(ek[3]);
ek[4] = ek[0] ^ ls_box(t) ^ *rc++; ek[4] = ek[0] ^ ls_box(t) ^ *rc++;
ek[5] = ek[1] ^ ek[4]; ek[5] = ek[1] ^ ek[4];
ek[6] = ek[2] ^ ek[5]; ek[6] = ek[2] ^ ek[5];
ek[7] = ek[3] ^ ek[6]; ek[7] = ek[3] ^ ek[6];
ek += 4; ek += 4;
} }
} }
/*----------------------------------------------------------- /*-----------------------------------------------------------
* RijndaelEncrypt * RijndaelEncrypt
* Encrypt an input block * Encrypt an input block
*/ */
void RijndaelEncrypt(uint8_t in[16], uint8_t out[16]) void RijndaelEncrypt(uint8_t in[16], uint8_t out[16])
{ {
uint32_t b0[4], b1[4], *kp = Ekey; uint32_t b0[4], b1[4], *kp = Ekey;
b0[0] = u32_in(in ) ^ *kp++; b0[0] = u32_in(in ) ^ *kp++;
b0[1] = u32_in(in + 4) ^ *kp++; b0[1] = u32_in(in + 4) ^ *kp++;
b0[2] = u32_in(in + 8) ^ *kp++; b0[2] = u32_in(in + 8) ^ *kp++;
b0[3] = u32_in(in + 12) ^ *kp++; b0[3] = u32_in(in + 12) ^ *kp++;
f_round(b1, b0, kp); f_round(b1, b0, kp);
f_round(b0, b1, kp); f_round(b0, b1, kp);
f_round(b1, b0, kp); f_round(b1, b0, kp);
f_round(b0, b1, kp); f_round(b0, b1, kp);
f_round(b1, b0, kp); f_round(b1, b0, kp);
f_round(b0, b1, kp); f_round(b0, b1, kp);
f_round(b1, b0, kp); f_round(b1, b0, kp);
f_round(b0, b1, kp); f_round(b0, b1, kp);
f_round(b1, b0, kp); f_round(b1, b0, kp);
u32_out(out, lf_rnd(b1, 0) ^ kp[0]); u32_out(out, lf_rnd(b1, 0) ^ kp[0]);
u32_out(out + 4, lf_rnd(b1, 1) ^ kp[1]); u32_out(out + 4, lf_rnd(b1, 1) ^ kp[1]);
u32_out(out + 8, lf_rnd(b1, 2) ^ kp[2]); u32_out(out + 8, lf_rnd(b1, 2) ^ kp[2]);
u32_out(out + 12, lf_rnd(b1, 3) ^ kp[3]); u32_out(out + 12, lf_rnd(b1, 3) ^ kp[3]);
} }

View File

@ -1,258 +1,264 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_dialog_layer.c /**@file tsip_dialog_layer.c
* @brief SIP dialog layer. * @brief SIP dialog layer.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include "tinysip/dialogs/tsip_dialog_layer.h" #include "tinysip/dialogs/tsip_dialog_layer.h"
#include "tinysip/dialogs/tsip_dialog_register.h" #include "tinysip/dialogs/tsip_dialog_register.h"
#include "tinysip/dialogs/tsip_dialog_message.h" #include "tinysip/dialogs/tsip_dialog_message.h"
#include "tinysip/transactions/tsip_transac_layer.h" #include "tinysip/transactions/tsip_transac_layer.h"
/** /**
* @fn static tsip_dialog_t* tsip_dialog_layer_find_dialog(tsip_dialog_layer_t *self, * @fn static tsip_dialog_t* tsip_dialog_layer_find_dialog(tsip_dialog_layer_t *self,
* tsip_dialog_type_t type, const tsip_operation_handle_t *operation) * tsip_dialog_type_t type, const tsip_operation_handle_t *operation)
* *
* @brief Internal function used to find a dialog by type and * @brief Internal function used to find a dialog by type and
* *
* @author Mamadou * @author Mamadou
* @date 1/3/2010 * @date 1/3/2010
* *
* @param [in,out] self If non-null, the self. * @param [in,out] self If non-null, the self.
* @param type The type. * @param type The type.
* @param [in,out] operation If non-null, the operation. * @param [in,out] operation If non-null, the operation.
* *
* @return null if it fails, else. * @return null if it fails, else.
**/ **/
static tsip_dialog_t* tsip_dialog_layer_find_dialog(tsip_dialog_layer_t *self, tsip_dialog_type_t type, const tsip_operation_handle_t *operation) static tsip_dialog_t* tsip_dialog_layer_find_dialog(tsip_dialog_layer_t *self, tsip_dialog_type_t type, const tsip_operation_handle_t *operation)
{ {
const tsk_list_item_t *item = tsk_list_find_item_by_data(self->dialogs, operation); const tsk_list_item_t *item;
if(item && item->data)
{ tsk_safeobj_lock(self);
tsip_dialog_t *dialog = item->data; item = tsk_list_find_item_by_data(self->dialogs, operation);
if(dialog && dialog->type == type) tsk_safeobj_unlock(self);
{
return dialog; if(item && item->data)
} {
} tsip_dialog_t *dialog = item->data;
return 0; if(dialog && dialog->type == type)
} {
return dialog;
const tsip_dialog_t* tsip_dialog_layer_find(const tsip_dialog_layer_t *self, const char* callid, const char* to_tag, const char* from_tag) }
{ }
tsip_dialog_t *ret = 0; return 0;
tsip_dialog_t *dialog; }
tsk_list_item_t *item;
const tsip_dialog_t* tsip_dialog_layer_find(const tsip_dialog_layer_t *self, const char* callid, const char* to_tag, const char* from_tag)
tsk_safeobj_lock(self); {
tsip_dialog_t *ret = 0;
tsk_list_foreach(item, self->dialogs) tsip_dialog_t *dialog;
{ tsk_list_item_t *item;
dialog = item->data;
if( tsk_strequals(dialog->callid, callid) tsk_safeobj_lock(self);
&& tsk_strequals(dialog->tag_local, to_tag)
&& tsk_strequals(dialog->tag_remote, from_tag) tsk_list_foreach(item, self->dialogs)
) {
{ dialog = item->data;
ret = dialog; if( tsk_strequals(dialog->callid, callid)
break; && tsk_strequals(dialog->tag_local, to_tag)
} && tsk_strequals(dialog->tag_remote, from_tag)
} )
{
tsk_safeobj_unlock(self); ret = dialog;
break;
return ret; }
} }
/** tsk_safeobj_unlock(self);
* @fn int tsip_dialog_layer_register(tsip_dialog_layer_t *self,
* const tsip_operation_handle_t *operation) return ret;
* }
* @brief Performs SIP/IMS registration operation. Action initiated by the stack layer.
* /**
* @author Mamadou * @fn int tsip_dialog_layer_register(tsip_dialog_layer_t *self,
* @date 1/3/2010 * const tsip_operation_handle_t *operation)
* *
* @param [in,out] self The dialog layer used to perform the operation. * @brief Performs SIP/IMS registration operation. Action initiated by the stack layer.
* @param [in,out] operation A pointer to the operation to perform. *
* * @author Mamadou
* @return Zero if succeed and non-zero error code otherwise. * @date 1/3/2010
**/ *
int tsip_dialog_layer_register(tsip_dialog_layer_t *self, const tsip_operation_handle_t *operation) * @param [in,out] self The dialog layer used to perform the operation.
{ * @param [in,out] operation A pointer to the operation to perform.
int ret = -1; *
* @return Zero if succeed and non-zero error code otherwise.
if(self) **/
{ int tsip_dialog_layer_register(tsip_dialog_layer_t *self, const tsip_operation_handle_t *operation)
//tsk_safeobj_lock(self); {
int ret = -1;
tsip_dialog_register_t *dialog = (tsip_dialog_register_t*)tsip_dialog_layer_find_dialog(self, tsip_dialog_register, operation); tsip_dialog_register_t *dialog;
if(dialog)
{ if(self)
{
} //tsk_safeobj_lock(self);
else dialog = (tsip_dialog_register_t*)tsip_dialog_layer_find_dialog(self, tsip_dialog_register, operation);
{ //tsk_safeobj_unlock(self);
dialog = TSIP_DIALOG_REGISTER_CREATE(self->stack, operation);
ret = tsip_dialog_register_start(dialog); if(dialog)
tsk_list_push_back_data(self->dialogs, (void**)&dialog); {
}
}
//tsk_safeobj_unlock(self); else
} {
return ret; dialog = TSIP_DIALOG_REGISTER_CREATE(self->stack, operation);
} ret = tsip_dialog_register_start(dialog);
tsk_list_push_back_data(self->dialogs, (void**)&dialog);
}
int tsip_dialog_layer_hangupAll(tsip_dialog_layer_t *self) }
{ return ret;
if(self) }
{
tsk_list_item_t *item;
tsip_dialog_t *dialog; int tsip_dialog_layer_hangupAll(tsip_dialog_layer_t *self)
tsk_list_foreach(item, self->dialogs) {
{ if(self)
dialog = item->data; {
tsip_dialog_hangup(dialog); tsk_list_item_t *item;
} tsip_dialog_t *dialog;
return 0; tsk_list_foreach(item, self->dialogs)
} {
dialog = item->data;
return -1; tsip_dialog_hangup(dialog);
} }
return 0;
int tsip_dialog_layer_remove(tsip_dialog_layer_t *self, const tsip_dialog_t *dialog) }
{
if(dialog && self) return -1;
{ }
tsk_safeobj_lock(self);
tsk_list_remove_item_by_data(self->dialogs, dialog); int tsip_dialog_layer_remove(tsip_dialog_layer_t *self, const tsip_dialog_t *dialog)
tsk_safeobj_unlock(self); {
if(dialog && self)
return 0; {
} tsk_safeobj_lock(self);
tsk_list_remove_item_by_data(self->dialogs, dialog);
return -1; tsk_safeobj_unlock(self);
}
return 0;
int tsip_dialog_layer_handle_incoming_msg(const tsip_dialog_layer_t *self, const tsip_message_t* message) }
{
int ret = -1; return -1;
const tsip_dialog_t* dialog; }
tsk_safeobj_lock(self); int tsip_dialog_layer_handle_incoming_msg(const tsip_dialog_layer_t *self, const tsip_message_t* message)
{
dialog = tsip_dialog_layer_find(self, message->Call_ID->value, message->To->tag, message->From->tag); int ret = -1;
if(dialog) const tsip_dialog_t* dialog;
{
dialog->callback(dialog, tsip_dialog_msg, message); //tsk_safeobj_lock(self);
} dialog = tsip_dialog_layer_find(self, message->Call_ID->value, message->To->tag, message->From->tag);
else //tsk_safeobj_unlock(self);
{
const tsip_transac_layer_t *layer_transac = tsip_stack_get_transac_layer(self->stack); if(dialog)
/*const*/ tsip_transac_t* transac; {
dialog->callback(dialog, tsip_dialog_msg, message);
if(TSIP_MESSAGE_IS_REQUEST(message)) }
{ else
if(tsk_strequals("MESSAGE", TSIP_REQUEST_METHOD(message))) {
{ const tsip_transac_layer_t *layer_transac = tsip_stack_get_transac_layer(self->stack);
tsip_dialog_message_t *dlg_msg = TSIP_DIALOG_MESSAGE_CREATE(self->stack, 0); /*const*/ tsip_transac_t* transac;
transac = tsip_transac_layer_new(layer_transac, TSIP_FALSE, message); if(TSIP_MESSAGE_IS_REQUEST(message))
if(transac) {
{ if(tsk_strequals("MESSAGE", TSIP_REQUEST_METHOD(message)))
TSIP_TRANSAC(transac)->dialog = TSIP_DIALOG(dlg_msg); {
} tsip_dialog_message_t *dlg_msg = TSIP_DIALOG_MESSAGE_CREATE(self->stack, 0);
tsk_list_push_back_data(self->dialogs, (void**)&dlg_msg);
} transac = tsip_transac_layer_new(layer_transac, TSIP_FALSE, message);
if(transac)
else if(tsk_strequals("INVITE", TSIP_REQUEST_METHOD(message))) {
{ TSIP_TRANSAC(transac)->dialog = TSIP_DIALOG(dlg_msg);
} }
tsk_list_push_back_data(self->dialogs, (void**)&dlg_msg);
// .... }
if(transac) else if(tsk_strequals("INVITE", TSIP_REQUEST_METHOD(message)))
{ {
ret = tsip_transac_start(transac, message); }
}
// ....
}
} if(transac)
{
tsk_safeobj_unlock(self); ret = tsip_transac_start(transac, message);
}
return ret;
} }
}
return ret;
//======================================================== }
// Dialog layer object definition
//
static void* tsip_dialog_layer_create(void * self, va_list * app)
{
tsip_dialog_layer_t *layer = self;
if(layer) //========================================================
{ // Dialog layer object definition
layer->stack = va_arg(*app, const tsip_stack_handle_t *); //
layer->dialogs = TSK_LIST_CREATE(); static void* tsip_dialog_layer_create(void * self, va_list * app)
{
tsk_safeobj_init(layer); tsip_dialog_layer_t *layer = self;
} if(layer)
return self; {
} layer->stack = va_arg(*app, const tsip_stack_handle_t *);
layer->dialogs = TSK_LIST_CREATE();
static void* tsip_dialog_layer_destroy(void * self)
{ tsk_safeobj_init(layer);
tsip_dialog_layer_t *layer = self; }
if(layer) return self;
{ }
TSK_LIST_SAFE_FREE(layer->dialogs);
static void* tsip_dialog_layer_destroy(void * self)
tsk_safeobj_deinit(layer); {
} tsip_dialog_layer_t *layer = self;
return self; if(layer)
} {
TSK_LIST_SAFE_FREE(layer->dialogs);
static int tsip_dialog_layer_cmp(const void *obj1, const void *obj2)
{ tsk_safeobj_deinit(layer);
return -1; }
} return self;
}
static const tsk_object_def_t tsip_dialog_layer_def_s =
{ static int tsip_dialog_layer_cmp(const void *obj1, const void *obj2)
sizeof(tsip_dialog_layer_t), {
tsip_dialog_layer_create, return -1;
tsip_dialog_layer_destroy, }
tsip_dialog_layer_cmp,
}; static const tsk_object_def_t tsip_dialog_layer_def_s =
const void *tsip_dialog_layer_def_t = &tsip_dialog_layer_def_s; {
sizeof(tsip_dialog_layer_t),
tsip_dialog_layer_create,
tsip_dialog_layer_destroy,
tsip_dialog_layer_cmp,
};
const void *tsip_dialog_layer_def_t = &tsip_dialog_layer_def_s;

View File

@ -142,7 +142,7 @@ const char *tsip_header_get_name(tsip_header_type_t type)
} }
} }
const char tsip_header_get_param_separator(const tsip_header_t *self) char tsip_header_get_param_separator(const tsip_header_t *self)
{ {
if(self) if(self)
{ {
@ -174,7 +174,7 @@ int tsip_header_tostring(const tsip_header_t *self, tsk_buffer_t *output)
if(self && TSIP_HEADER(self)->tostring) if(self && TSIP_HEADER(self)->tostring)
{ {
tsk_list_item_t *item; tsk_list_item_t *item;
int first = 1;
hname = tsip_header_get_name(self->type); hname = tsip_header_get_name(self->type);
ret = 0; // for empty lists ret = 0; // for empty lists

View File

@ -5,45 +5,45 @@
* from file : tsip_dialog_register.sm * from file : tsip_dialog_register.sm
*/ */
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_dialog_register.sm. /**@file tsip_dialog_register.sm.
* @brief SIP dialog REGISTER. * @brief SIP dialog REGISTER.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
//#define tsip_dialog_register_TSIP_DIALOG_BEGIN_TRANSIT(self) TSIP_DIALOG_BEGIN_TRANSIT(self) //#define tsip_dialog_register_TSIP_DIALOG_BEGIN_TRANSIT(self) TSIP_DIALOG_BEGIN_TRANSIT(self)
//#define tsip_dialog_register_TSIP_DIALOG_END_TRANSIT(self) TSIP_DIALOG_END_TRANSIT(self) //#define tsip_dialog_register_TSIP_DIALOG_END_TRANSIT(self) TSIP_DIALOG_END_TRANSIT(self)
#include <assert.h> #include <assert.h>
#include "tinysip/dialogs/tsip_dialog_register.h" #include "tinysip/dialogs/tsip_dialog_register.h"
#include "tsk_debug.h" #include "tsk_debug.h"
#include "C:\Projects\Doubango\tinySIP\include\tinysip\smc\tsip_dialog_register_sm.h" #include "tinysip/smc/tsip_dialog_register_sm.h"
#define getOwner(fsm) \ #define getOwner(fsm) \
(fsm)->_owner (fsm)->_owner

View File

@ -5,41 +5,41 @@
* from file : tsip_transac_ict.sm * from file : tsip_transac_ict.sm
*/ */
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_transac_ict.c /**@file tsip_transac_ict.c
* @brief SIP INVITE Client Transaction as per RFC 3261 subclause 17.1.1. * @brief SIP INVITE Client Transaction as per RFC 3261 subclause 17.1.1.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include <assert.h> #include <assert.h>
#include "tinysip/transactions/tsip_transac_ict.h" #include "tinysip/transactions/tsip_transac_ict.h"
#include "C:\Projects\Doubango\tinySIP\include\tinysip\smc\tsip_transac_ict_sm.h" #include "tinysip/smc/tsip_transac_ict_sm.h"
#define getOwner(fsm) \ #define getOwner(fsm) \
(fsm)->_owner (fsm)->_owner

View File

@ -5,41 +5,41 @@
* from file : tsip_transac_ist.sm * from file : tsip_transac_ist.sm
*/ */
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_transac_ist.sm /**@file tsip_transac_ist.sm
* @brief SIP INVITE Server Transaction as per RFC 3261 subclause 17.2.1. * @brief SIP INVITE Server Transaction as per RFC 3261 subclause 17.2.1.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include <assert.h> #include <assert.h>
#include "tinysip/transactions/tsip_transac_ist.h" #include "tinysip/transactions/tsip_transac_ist.h"
#include "C:\Projects\Doubango\tinySIP\include\tinysip\smc\tsip_transac_ist_sm.h" #include "tinysip/smc/tsip_transac_ist_sm.h"
#define getOwner(fsm) \ #define getOwner(fsm) \
(fsm)->_owner (fsm)->_owner

View File

@ -5,41 +5,41 @@
* from file : tsip_transac_nict.sm * from file : tsip_transac_nict.sm
*/ */
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_transac_nict.sm /**@file tsip_transac_nict.sm
* @brief SIP Non-INVITE Client Transaction as per RFC 3261 subcaluse 17.1.2. * @brief SIP Non-INVITE Client Transaction as per RFC 3261 subcaluse 17.1.2.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include <assert.h> #include <assert.h>
#include "tinysip/transactions/tsip_transac_nict.h" #include "tinysip/transactions/tsip_transac_nict.h"
#include "C:\Projects\Doubango\tinySIP\include\tinysip\smc\tsip_transac_nict_sm.h" #include "tinysip/smc/tsip_transac_nict_sm.h"
#define getOwner(fsm) \ #define getOwner(fsm) \
(fsm)->_owner (fsm)->_owner

View File

@ -5,41 +5,41 @@
* from file : tsip_transac_nist.sm * from file : tsip_transac_nist.sm
*/ */
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_transac_nist.sm /**@file tsip_transac_nist.sm
* @brief SIP Non-INVITE Server Transaction as per RFC 3261 subclause 17.2.2. * @brief SIP Non-INVITE Server Transaction as per RFC 3261 subclause 17.2.2.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include <assert.h> #include <assert.h>
#include "tinysip/transactions/tsip_transac_nist.h" #include "tinysip/transactions/tsip_transac_nist.h"
#include "C:\Projects\Doubango\tinySIP\include\tinysip\smc\tsip_transac_nist_sm.h" #include "tinysip/smc/tsip_transac_nist_sm.h"
#define getOwner(fsm) \ #define getOwner(fsm) \
(fsm)->_owner (fsm)->_owner

File diff suppressed because it is too large Load Diff

View File

@ -1,318 +1,318 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
/**@file tsip_transac_layer.c /**@file tsip_transac_layer.c
* @brief SIP transaction layer. * @brief SIP transaction layer.
* *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr> * @author Mamadou Diop <diopmamadou(at)yahoo.fr>
* *
* @date Created: Sat Nov 8 16:54:58 2009 mdiop * @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/ */
#include "tinysip/transactions/tsip_transac_layer.h" #include "tinysip/transactions/tsip_transac_layer.h"
#include "tinysip/transactions/tsip_transac_ict.h" #include "tinysip/transactions/tsip_transac_ict.h"
#include "tinysip/transactions/tsip_transac_ist.h" #include "tinysip/transactions/tsip_transac_ist.h"
#include "tinysip/transactions/tsip_transac_nict.h" #include "tinysip/transactions/tsip_transac_nict.h"
#include "tinysip/transactions/tsip_transac_nist.h" #include "tinysip/transactions/tsip_transac_nist.h"
#include "tsk_string.h" #include "tsk_string.h"
tsip_transac_t* tsip_transac_layer_new(const tsip_transac_layer_t *self, TSIP_BOOLEAN isCT, const tsip_message_t* msg) tsip_transac_t* tsip_transac_layer_new(const tsip_transac_layer_t *self, TSIP_BOOLEAN isCT, const tsip_message_t* msg)
{ {
tsip_transac_t *ret = 0; tsip_transac_t *ret = 0;
tsk_safeobj_lock(self); tsk_safeobj_lock(self);
if(self && msg) if(self && msg)
{ {
if(TSIP_MESSAGE_IS_REQUEST(msg)) if(TSIP_MESSAGE_IS_REQUEST(msg))
{ {
if(isCT) if(isCT)
{ {
if(tsk_striequals(TSIP_MESSAGE_AS_REQUEST(msg)->line_request.method, "INVITE")) if(tsk_striequals(TSIP_MESSAGE_AS_REQUEST(msg)->line_request.method, "INVITE"))
{ {
// INVITE Client transaction (ICT) // INVITE Client transaction (ICT)
} }
else else
{ {
// NON-INVITE Client transaction (NICT) // NON-INVITE Client transaction (NICT)
tsip_transac_nict_t *transac = TSIP_TRANSAC_NICT_CREATE(self->stack, 0, msg->CSeq->seq, msg->CSeq->method, msg->Call_ID->value); tsip_transac_nict_t *transac = TSIP_TRANSAC_NICT_CREATE(self->stack, 0, msg->CSeq->seq, msg->CSeq->method, msg->Call_ID->value);
ret = TSIP_TRANSAC(transac); ret = TSIP_TRANSAC(transac);
tsk_list_push_back_data(self->transactions, (void**)&transac); tsk_list_push_back_data(self->transactions, (void**)&transac);
} }
} }
else else
{ {
if(tsk_striequals(TSIP_MESSAGE_AS_REQUEST(msg)->line_request.method, "INVITE")) if(tsk_striequals(TSIP_MESSAGE_AS_REQUEST(msg)->line_request.method, "INVITE"))
{ {
// INVITE Server transaction (IST) // INVITE Server transaction (IST)
} }
else else
{ {
// NON-INVITE Server transaction (NIST) // NON-INVITE Server transaction (NIST)
tsip_transac_nist_t *transac = TSIP_TRANSAC_NIST_CREATE(self->stack, 0, msg->CSeq->seq, msg->CSeq->method, msg->Call_ID->value); tsip_transac_nist_t *transac = TSIP_TRANSAC_NIST_CREATE(self->stack, 0, msg->CSeq->seq, msg->CSeq->method, msg->Call_ID->value);
ret = TSIP_TRANSAC(transac); ret = TSIP_TRANSAC(transac);
tsk_list_push_back_data(self->transactions, (void**)&transac); tsk_list_push_back_data(self->transactions, (void**)&transac);
} }
if(ret) if(ret)
{ {
ret->branch = tsk_strdup(msg->firstVia->branch); ret->branch = tsk_strdup(msg->firstVia->branch);
} }
} }
} }
} }
tsk_safeobj_unlock(self); tsk_safeobj_unlock(self);
return ret; return ret;
} }
int tsip_transac_layer_remove(tsip_transac_layer_t *self, const tsip_transac_t *transac) int tsip_transac_layer_remove(tsip_transac_layer_t *self, const tsip_transac_t *transac)
{ {
if(transac && self) if(transac && self)
{ {
tsk_safeobj_lock(self); tsk_safeobj_lock(self);
tsk_list_remove_item_by_data(self->transactions, transac); tsk_list_remove_item_by_data(self->transactions, transac);
tsk_safeobj_unlock(self); tsk_safeobj_unlock(self);
return 0; return 0;
} }
return -1; return -1;
} }
const tsip_transac_t* tsip_transac_layer_find_client(const tsip_transac_layer_t *self, const tsip_message_t* message) const tsip_transac_t* tsip_transac_layer_find_client(const tsip_transac_layer_t *self, const tsip_message_t* message)
{ {
/* /*
RFC 3261 - 17.1.3 Matching Responses to Client Transactions RFC 3261 - 17.1.3 Matching Responses to Client Transactions
When the transport layer in the client receives a response, it has to When the transport layer in the client receives a response, it has to
determine which client transaction will handle the response, so that determine which client transaction will handle the response, so that
the processing of Sections 17.1.1 and 17.1.2 can take place. The the processing of Sections 17.1.1 and 17.1.2 can take place. The
branch parameter in the top Via header field is used for this branch parameter in the top Via header field is used for this
purpose. A response matches a client transaction under two purpose. A response matches a client transaction under two
conditions: conditions:
1. If the response has the same value of the branch parameter in 1. If the response has the same value of the branch parameter in
the top Via header field as the branch parameter in the top the top Via header field as the branch parameter in the top
Via header field of the request that created the transaction. Via header field of the request that created the transaction.
2. If the method parameter in the CSeq header field matches the 2. If the method parameter in the CSeq header field matches the
method of the request that created the transaction. The method of the request that created the transaction. The
method is needed since a CANCEL request constitutes a method is needed since a CANCEL request constitutes a
different transaction, but shares the same value of the branch different transaction, but shares the same value of the branch
parameter. parameter.
*/ */
tsip_transac_t *ret = 0; tsip_transac_t *ret = 0;
tsip_transac_t *transac; tsip_transac_t *transac;
tsk_list_item_t *item; tsk_list_item_t *item;
/* Check first Via/CSeq validity. /* Check first Via/CSeq validity.
*/ */
if(!message->firstVia || !message->CSeq) if(!message->firstVia || !message->CSeq)
{ {
return 0; return 0;
} }
//tsk_safeobj_lock(self); tsk_safeobj_lock(self);
tsk_list_foreach(item, self->transactions) tsk_list_foreach(item, self->transactions)
{ {
transac = item->data; transac = item->data;
if( tsk_strequals(transac->branch, message->firstVia->branch) if( tsk_strequals(transac->branch, message->firstVia->branch)
&& tsk_strequals(transac->cseq_method, message->CSeq->method) && tsk_strequals(transac->cseq_method, message->CSeq->method)
) )
{ {
ret = transac; ret = transac;
break; break;
} }
} }
//tsk_safeobj_unlock(self); tsk_safeobj_unlock(self);
return ret; return ret;
} }
const tsip_transac_t* tsip_transac_layer_find_server(const tsip_transac_layer_t *self, const tsip_message_t* message) const tsip_transac_t* tsip_transac_layer_find_server(const tsip_transac_layer_t *self, const tsip_message_t* message)
{ {
/* /*
RFC 3261 - 17.2.3 Matching Requests to Server Transactions RFC 3261 - 17.2.3 Matching Requests to Server Transactions
When a request is received from the network by the server, it has to When a request is received from the network by the server, it has to
be matched to an existing transaction. This is accomplished in the be matched to an existing transaction. This is accomplished in the
following manner. following manner.
The branch parameter in the topmost Via header field of the request The branch parameter in the topmost Via header field of the request
is examined. If it is present and begins with the magic cookie is examined. If it is present and begins with the magic cookie
"z9hG4bK", the request was generated by a client transaction "z9hG4bK", the request was generated by a client transaction
compliant to this specification. Therefore, the branch parameter compliant to this specification. Therefore, the branch parameter
will be unique across all transactions sent by that client. The will be unique across all transactions sent by that client. The
request matches a transaction if: request matches a transaction if:
1. the branch parameter in the request is equal to the one in the 1. the branch parameter in the request is equal to the one in the
top Via header field of the request that created the top Via header field of the request that created the
transaction, and transaction, and
2. the sent-by value in the top Via of the request is equal to the 2. the sent-by value in the top Via of the request is equal to the
one in the request that created the transaction, and one in the request that created the transaction, and
3. the method of the request matches the one that created the 3. the method of the request matches the one that created the
transaction, except for ACK, where the method of the request transaction, except for ACK, where the method of the request
that created the transaction is INVITE. that created the transaction is INVITE.
*/ */
tsip_transac_t *ret = 0; tsip_transac_t *ret = 0;
tsip_transac_t *transac; tsip_transac_t *transac;
tsk_list_item_t *item; tsk_list_item_t *item;
//const char* sent_by; //const char* sent_by;
/* Check first Via/CSeq validity. /* Check first Via/CSeq validity.
*/ */
if(!message->firstVia || !message->CSeq) if(!message->firstVia || !message->CSeq)
{ {
return 0; return 0;
} }
//tsk_safeobj_lock(self); tsk_safeobj_lock(self);
tsk_list_foreach(item, self->transactions) tsk_list_foreach(item, self->transactions)
{ {
transac = item->data; transac = item->data;
if(tsk_strequals(transac->branch, message->firstVia->branch) if(tsk_strequals(transac->branch, message->firstVia->branch)
&& (1 == 1) /* FIXME: compare host:ip */ && (1 == 1) /* FIXME: compare host:ip */
) )
{ {
if(tsk_strequals(transac->cseq_method, message->CSeq->method)) if(tsk_strequals(transac->cseq_method, message->CSeq->method))
{ {
ret = transac; ret = transac;
break; break;
} }
else if(tsk_strequals("ACK", message->CSeq->method) || tsk_strequals("CANCEL", message->CSeq->method)) else if(tsk_strequals("ACK", message->CSeq->method) || tsk_strequals("CANCEL", message->CSeq->method))
{ {
ret = transac; ret = transac;
break; break;
} }
} }
} }
//tsk_safeobj_unlock(self); tsk_safeobj_unlock(self);
return ret; return ret;
} }
/** /**
* @fn int tsip_transac_layer_handle_incoming_msg(const tsip_transac_layer_t *self, const tsip_message_t* message) * @fn int tsip_transac_layer_handle_incoming_msg(const tsip_transac_layer_t *self, const tsip_message_t* message)
* *
* @brief Handles SIP/IMS message incoming from the transport layer. * @brief Handles SIP/IMS message incoming from the transport layer.
* *
* @author Mamadou * @author Mamadou
* @date 1/8/2010 * @date 1/8/2010
* *
* @param [in,out] self The transaction layer. * @param [in,out] self The transaction layer.
* @param [in,out] message The SIP/IMS message to handle. * @param [in,out] message The SIP/IMS message to handle.
* *
* @return Zero if a matching transaction have been found and non-zero result code otherwise. * @return Zero if a matching transaction have been found and non-zero result code otherwise.
**/ **/
int tsip_transac_layer_handle_incoming_msg(const tsip_transac_layer_t *self, const tsip_message_t* message) int tsip_transac_layer_handle_incoming_msg(const tsip_transac_layer_t *self, const tsip_message_t* message)
{ {
int ret = -1; int ret = -1;
const tsip_transac_t *transac = 0; const tsip_transac_t *transac = 0;
tsk_safeobj_lock(self); //tsk_safeobj_lock(self);
if(TSIP_MESSAGE_IS_REQUEST(message)) if(TSIP_MESSAGE_IS_REQUEST(message))
{ {
transac = tsip_transac_layer_find_server(self, /*TSIP_MESSAGE_AS_REQUEST*/(message)); transac = tsip_transac_layer_find_server(self, /*TSIP_MESSAGE_AS_REQUEST*/(message));
} }
else else
{ {
transac = tsip_transac_layer_find_client(self, /*TSIP_MESSAGE_AS_RESPONSE*/(message)); transac = tsip_transac_layer_find_client(self, /*TSIP_MESSAGE_AS_RESPONSE*/(message));
} }
if(transac) //tsk_safeobj_unlock(self);
{
transac->callback(transac, tsip_transac_incoming_msg, message); if(transac)
ret = 0; {
} transac->callback(transac, tsip_transac_incoming_msg, message);
ret = 0;
tsk_safeobj_unlock(self); }
return ret; return ret;
} }
//======================================================== //========================================================
// Transaction layer object definition // Transaction layer object definition
// //
static void* tsip_transac_layer_create(void * self, va_list * app) static void* tsip_transac_layer_create(void * self, va_list * app)
{ {
tsip_transac_layer_t *layer = self; tsip_transac_layer_t *layer = self;
if(layer) if(layer)
{ {
layer->stack = va_arg(*app, const tsip_stack_handle_t *); layer->stack = va_arg(*app, const tsip_stack_handle_t *);
layer->transactions = TSK_LIST_CREATE(); layer->transactions = TSK_LIST_CREATE();
tsk_safeobj_init(layer); tsk_safeobj_init(layer);
} }
return self; return self;
} }
static void* tsip_transac_layer_destroy(void * self) static void* tsip_transac_layer_destroy(void * self)
{ {
tsip_transac_layer_t *layer = self; tsip_transac_layer_t *layer = self;
if(layer) if(layer)
{ {
TSK_LIST_SAFE_FREE(layer->transactions); TSK_LIST_SAFE_FREE(layer->transactions);
tsk_safeobj_deinit(layer); tsk_safeobj_deinit(layer);
} }
return self; return self;
} }
static int tsip_transac_layer_cmp(const void *obj1, const void *obj2) static int tsip_transac_layer_cmp(const void *obj1, const void *obj2)
{ {
return -1; return -1;
} }
static const tsk_object_def_t tsip_transac_layer_def_s = static const tsk_object_def_t tsip_transac_layer_def_s =
{ {
sizeof(tsip_transac_layer_t), sizeof(tsip_transac_layer_t),
tsip_transac_layer_create, tsip_transac_layer_create,
tsip_transac_layer_destroy, tsip_transac_layer_destroy,
tsip_transac_layer_cmp, tsip_transac_layer_cmp,
}; };
const void *tsip_transac_layer_def_t = &tsip_transac_layer_def_s; const void *tsip_transac_layer_def_t = &tsip_transac_layer_def_s;

View File

@ -44,6 +44,7 @@
#include "tsk_time.h" #include "tsk_time.h"
#include <stdarg.h> #include <stdarg.h>
#include <string.h>
void *run(void* self); void *run(void* self);
@ -110,7 +111,11 @@ int __tsip_stack_set(tsip_stack_t *self, va_list values)
} }
case pname_local_port: case pname_local_port:
{ {
#if defined (__GNUC__)
self->local_port = (uint16_t)va_arg(values, unsigned);
#else
self->local_port = va_arg(values, uint16_t); self->local_port = va_arg(values, uint16_t);
#endif
break; break;
} }
case pname_privacy: case pname_privacy:
@ -257,7 +262,7 @@ int __tsip_stack_set(tsip_stack_t *self, va_list values)
return 0; return 0;
} }
static __tsip_initialized = 0; static unsigned __tsip_initialized = 0;
int tsip_global_init() int tsip_global_init()
{ {
@ -513,8 +518,8 @@ int tsip_stack_unregister(tsip_stack_handle_t *self, const tsip_operation_handle
{ {
if(self && operation) if(self && operation)
{ {
const tsip_stack_t *stack = self; //const tsip_stack_t *stack = self;
tsip_operation_handle_t *op = tsip_operation_clone(operation); //tsip_operation_handle_t *op = tsip_operation_clone(operation);
//tsk_list_push_back_data(stack->operations, (void**)&op); //tsk_list_push_back_data(stack->operations, (void**)&op);
} }
@ -576,7 +581,11 @@ static void* tsip_event_create(void * self, va_list * app)
sipevent->stack = va_arg(*app, const tsip_stack_handle_t *); sipevent->stack = va_arg(*app, const tsip_stack_handle_t *);
sipevent->opid = va_arg(*app, tsip_operation_id_t); sipevent->opid = va_arg(*app, tsip_operation_id_t);
#if defined(__GNUC__)
sipevent->status_code = (short)va_arg(*app, int);
#else
sipevent->status_code = va_arg(*app, short); sipevent->status_code = va_arg(*app, short);
#endif
sipevent->reason_phrase = tsk_strdup(va_arg(*app, const char *)); sipevent->reason_phrase = tsk_strdup(va_arg(*app, const char *));
sipevent->incoming = va_arg(*app, unsigned); sipevent->incoming = va_arg(*app, unsigned);

View File

@ -407,25 +407,25 @@ static void* tsip_message_create(void *self, va_list * app)
message->sockfd = request->sockfd; message->sockfd = request->sockfd;
/* /*
RFC 3261 - 8.2.6.2 Headers and Tags RFC 3261 - 8.2.6.2 Headers and Tags
The From field of the response MUST equal the From header field of The From field of the response MUST equal the From header field of
the request. The Call-ID header field of the response MUST equal the the request. The Call-ID header field of the response MUST equal the
Call-ID header field of the request. The CSeq header field of the Call-ID header field of the request. The CSeq header field of the
response MUST equal the CSeq field of the request. The Via header response MUST equal the CSeq field of the request. The Via header
field values in the response MUST equal the Via header field values field values in the response MUST equal the Via header field values
in the request and MUST maintain the same ordering. in the request and MUST maintain the same ordering.
If a request contained a To tag in the request, the To header field If a request contained a To tag in the request, the To header field
in the response MUST equal that of the request. However, if the To in the response MUST equal that of the request. However, if the To
header field in the request did not contain a tag, the URI in the To header field in the request did not contain a tag, the URI in the To
header field in the response MUST equal the URI in the To header header field in the response MUST equal the URI in the To header
field; additionally, the UAS MUST add a tag to the To header field in field; additionally, the UAS MUST add a tag to the To header field in
the response (with the exception of the 100 (Trying) response, in the response (with the exception of the 100 (Trying) response, in
which a tag MAY be present). This serves to identify the UAS that is which a tag MAY be present). This serves to identify the UAS that is
responding, possibly resulting in a component of a dialog ID. The responding, possibly resulting in a component of a dialog ID. The
same tag MUST be used for all responses to that request, both final same tag MUST be used for all responses to that request, both final
and provisional (again excepting the 100 (Trying)). Procedures for and provisional (again excepting the 100 (Trying)). Procedures for
the generation of tags are defined in Section 19.3. the generation of tags are defined in Section 19.3.
*/ */
message->From = tsk_object_ref((void*)request->From); message->From = tsk_object_ref((void*)request->From);

View File

@ -28,7 +28,10 @@
#endif #endif
#include <stdio.h> #include <stdio.h>
#if (defined(_WIN32) || defined(WIN32) || defined(_WIN32_WCE)) && !defined(__SYMBIAN32__)
#include <tchar.h> #include <tchar.h>
#endif

View File

@ -1,78 +1,79 @@
/* /*
* Copyright (C) 2009 Mamadou Diop. * Copyright (C) 2009 Mamadou Diop.
* *
* Contact: Mamadou Diop <diopmamadou@yahoo.fr> * Contact: Mamadou Diop <diopmamadou@yahoo.fr>
* *
* This file is part of Open Source Doubango Framework. * This file is part of Open Source Doubango Framework.
* *
* DOUBANGO is free software: you can redistribute it and/or modify * DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* DOUBANGO is distributed in the hope that it will be useful, * DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with DOUBANGO. * along with DOUBANGO.
* *
*/ */
#ifndef _TEST_STACK_H #ifndef _TEST_STACK_H
#define _TEST_STACK_H #define _TEST_STACK_H
int test_stack_callback(const tsip_event_t *sipevent) int test_stack_callback(const tsip_event_t *sipevent)
{ {
tsip_operation_id_t opid = sipevent->opid; //tsip_operation_id_t opid = sipevent->opid;
// find operation by id // find operation by id
TSK_DEBUG_INFO("\n====\nSTACK event: %d [%s]\n=====", sipevent->status_code, sipevent->reason_phrase); TSK_DEBUG_INFO("\n====\nSTACK event: %d [%s]\n=====", sipevent->status_code, sipevent->reason_phrase);
//tsk_thread_sleep(1000000); //tsk_thread_sleep(1000000);
return 0; return 0;
} }
void test_stack() void test_stack()
{ {
tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback, tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback,
TSIP_STACK_SET_DISPLAY_NAME("Mamadou"), TSIP_STACK_SET_DISPLAY_NAME("Mamadou"),
TSIP_STACK_SET_PUBLIC_IDENTITY("sip:mamadou@micromethod.com"), TSIP_STACK_SET_PUBLIC_IDENTITY("sip:mamadou@micromethod.com"),
TSIP_STACK_SET_PRIVATE_IDENTITY("mamadou@micromethod.com"), TSIP_STACK_SET_PRIVATE_IDENTITY("mamadou@micromethod.com"),
TSIP_STACK_SET_PASSWORD("mamadou"), TSIP_STACK_SET_PASSWORD("mamadou"),
TSIP_STACK_SET_REALM("sip:micromethod.com"), TSIP_STACK_SET_REALM("sip:micromethod.com"),
TSIP_STACK_SET_PROXY_CSCF("192.168.0.15", "udp", 0), TSIP_STACK_SET_PROXY_CSCF("192.168.0.15", "udp", 0),
TSIP_STACK_SET_SEC_AGREE_MECH("ipsec-3gpp"), TSIP_STACK_SET_SEC_AGREE_MECH("ipsec-3gpp"),
TSIP_STACK_SET_PROXY_CSCF_PORT(5060), TSIP_STACK_SET_PROXY_CSCF_PORT(5060),
TSIP_STACK_SET_MOBILITY("fixed"), TSIP_STACK_SET_MOBILITY("fixed"),
TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"), TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"),
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"), TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_NULL()); TSIP_STACK_SET_NULL());
tsip_operation_handle_t *op = TSIP_OPERATION_CREATE(stack, tsip_operation_handle_t *op = TSIP_OPERATION_CREATE(stack,
TSIP_OPERATION_SET_PARAM("expires", "600000"), TSIP_OPERATION_SET_PARAM("expires", "600000"),
TSIP_OPERATION_SET_NULL()); TSIP_OPERATION_SET_NULL());
tsip_operation_id_t opid = tsip_operation_get_id(op); tsip_operation_id_t opid = tsip_operation_get_id(op);
tsip_stack_start(stack); tsip_stack_start(stack);
tsip_stack_register(stack, op); tsip_stack_register(stack, op);
//while(1) //while(1);//tsk_thread_sleep(500);
//tsk_thread_sleep(50000000000); //while(1)
getchar(); //tsk_thread_sleep(50000000000);
getchar();
tsip_stack_stop(stack);
tsip_stack_stop(stack);
TSIP_OPERATION_SAFE_FREE(op);
tsip_stack_destroy(stack); TSIP_OPERATION_SAFE_FREE(op);
} tsip_stack_destroy(stack);
}
#endif /* _TEST_STACK_H */
#endif /* _TEST_STACK_H */

View File

@ -0,0 +1,350 @@
// !$*UTF8*$!
{
08FB7793FE84155DC02AAC07 /* Project object */ = {
activeBuildConfigurationName = Debug;
activeExecutable = ECED623E10F98B46006B4DC9 /* test */;
activeTarget = D2AAC0620554660B00DB518D /* tinyHTTP */;
addToTargets = (
ECED623C10F98B46006B4DC9 /* test */,
);
breakpoints = (
ECED625410F98BC5006B4DC9 /* test.c:46 */,
ECED625610F98BC9006B4DC9 /* test.c:53 */,
);
codeSenseManager = ECED619B10F9876E006B4DC9 /* Code sense */;
executables = (
ECED623E10F98B46006B4DC9 /* test */,
);
perUserDictionary = {
"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA23EDF0692099D00951B8B" = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
20,
234,
20,
134,
134,
63,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXBreakpointsDataSource_ActionID,
PBXBreakpointsDataSource_TypeID,
PBXBreakpointsDataSource_BreakpointID,
PBXBreakpointsDataSource_UseID,
PBXBreakpointsDataSource_LocationID,
PBXBreakpointsDataSource_ConditionID,
PBXBreakpointsDataSource_IgnoreCountID,
PBXBreakpointsDataSource_ContinueID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
455,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID;
PBXFileTableDataSourceColumnWidthsKey = (
16,
200,
50,
395,
);
PBXFileTableDataSourceColumnsKey = (
PBXSymbolsDataSource_SymbolTypeIconID,
PBXSymbolsDataSource_SymbolNameID,
PBXSymbolsDataSource_SymbolTypeID,
PBXSymbolsDataSource_ReferenceNameID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
415,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 284788562;
PBXWorkspaceStateSaveDate = 284788562;
};
perUserProjectItems = {
ECED625810F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625810F98BE0006B4DC9 /* PBXTextBookmark */;
ECED625910F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625910F98BE0006B4DC9 /* PBXTextBookmark */;
ECED625A10F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625A10F98BE0006B4DC9 /* PBXTextBookmark */;
ECED625B10F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625B10F98BE0006B4DC9 /* PBXTextBookmark */;
ECED625C10F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625C10F98BE0006B4DC9 /* PBXTextBookmark */;
ECED625D10F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625D10F98BE0006B4DC9 /* PBXTextBookmark */;
ECED625E10F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625E10F98BE0006B4DC9 /* PBXTextBookmark */;
ECED625F10F98BE0006B4DC9 /* PBXTextBookmark */ = ECED625F10F98BE0006B4DC9 /* PBXTextBookmark */;
ECED626010F98BE0006B4DC9 /* PBXTextBookmark */ = ECED626010F98BE0006B4DC9 /* PBXTextBookmark */;
ECED626110F98BE0006B4DC9 /* PBXTextBookmark */ = ECED626110F98BE0006B4DC9 /* PBXTextBookmark */;
ECED626310F98BF2006B4DC9 /* PBXTextBookmark */ = ECED626310F98BF2006B4DC9 /* PBXTextBookmark */;
};
sourceControlManager = ECED619A10F9876E006B4DC9 /* Source Control */;
userBuildSettings = {
};
};
D2AAC0620554660B00DB518D /* tinyHTTP */ = {
activeExec = 0;
};
ECED619A10F9876E006B4DC9 /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
};
};
ECED619B10F9876E006B4DC9 /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
ECED61B110F98893006B4DC9 /* thttp_utl.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {633, 135}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 0}";
};
};
ECED61B510F988B3006B4DC9 /* thttp_auth.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {750, 3724}}";
sepNavSelRange = "{2672, 112}";
sepNavVisRange = "{908, 222}";
};
};
ECED61BB10F988E7006B4DC9 /* tinySAK */ = {
activeExec = 0;
};
ECED61C110F98926006B4DC9 /* tinySAK_config.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {633, 1400}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 353}";
};
};
ECED623C10F98B46006B4DC9 /* test */ = {
activeExec = 0;
executables = (
ECED623E10F98B46006B4DC9 /* test */,
);
};
ECED623E10F98B46006B4DC9 /* test */ = {
isa = PBXExecutable;
activeArgIndices = (
);
argumentStrings = (
);
autoAttachOnCrash = 1;
breakpointsEnabled = 1;
configStateDict = {
};
customDataFormattersEnabled = 1;
debuggerPlugin = GDBDebugging;
disassemblyDisplayState = 0;
dylibVariantSuffix = "";
enableDebugStr = 1;
environmentEntries = (
);
executableSystemSymbolLevel = 0;
executableUserSymbolLevel = 0;
libgmallocEnabled = 0;
name = test;
savedGlobals = {
};
sourceDirectories = (
);
variableFormatDictionary = {
};
};
ECED624510F98B6A006B4DC9 /* test.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {683, 896}}";
sepNavSelRange = "{904, 0}";
sepNavVisRange = "{1033, 337}";
};
};
ECED624710F98B6A006B4DC9 /* test_auth.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {683, 1848}}";
sepNavSelRange = "{1051, 0}";
sepNavVisRange = "{1170, 561}";
};
};
ECED625410F98BC5006B4DC9 /* test.c:46 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = ECED624510F98B6A006B4DC9 /* test.c */;
functionName = "main()";
hitCount = 0;
ignoreCount = 0;
lineNumber = 46;
location = test;
modificationTime = 284789708.944878;
state = 1;
};
ECED625610F98BC9006B4DC9 /* test.c:53 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = ECED624510F98B6A006B4DC9 /* test.c */;
functionName = "main()";
hitCount = 0;
ignoreCount = 0;
lineNumber = 53;
location = test;
modificationTime = 284789708.945035;
state = 1;
};
ECED625810F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED61B110F98893006B4DC9 /* thttp_utl.c */;
name = "thttp_utl.c: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
ECED625910F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED61C110F98926006B4DC9 /* tinySAK_config.h */;
name = "tinySAK_config.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 353;
vrLoc = 0;
};
ECED625A10F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED61B510F988B3006B4DC9 /* thttp_auth.c */;
name = "thttp_auth.c: 88";
rLen = 112;
rLoc = 2672;
rType = 0;
vrLen = 222;
vrLoc = 908;
};
ECED625B10F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED624510F98B6A006B4DC9 /* test.c */;
name = "test.c: 30";
rLen = 0;
rLoc = 904;
rType = 0;
vrLen = 337;
vrLoc = 1033;
};
ECED625C10F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED624710F98B6A006B4DC9 /* test_auth.h */;
rLen = 0;
rLoc = 39;
rType = 1;
};
ECED625D10F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED61B110F98893006B4DC9 /* thttp_utl.c */;
name = "thttp_utl.c: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
ECED625E10F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED61B510F988B3006B4DC9 /* thttp_auth.c */;
name = "thttp_auth.c: 29";
rLen = 39;
rLoc = 966;
rType = 0;
vrLen = 250;
vrLoc = 782;
};
ECED625F10F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED61C110F98926006B4DC9 /* tinySAK_config.h */;
name = "tinySAK_config.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 353;
vrLoc = 0;
};
ECED626010F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED61B510F988B3006B4DC9 /* thttp_auth.c */;
name = "thttp_auth.c: 88";
rLen = 112;
rLoc = 2672;
rType = 0;
vrLen = 222;
vrLoc = 908;
};
ECED626110F98BE0006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED624510F98B6A006B4DC9 /* test.c */;
name = "test.c: 30";
rLen = 0;
rLoc = 904;
rType = 0;
vrLen = 337;
vrLoc = 1033;
};
ECED626310F98BF2006B4DC9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = ECED624710F98B6A006B4DC9 /* test_auth.h */;
name = "test_auth.h: 40";
rLen = 0;
rLoc = 1051;
rType = 0;
vrLen = 561;
vrLoc = 1170;
};
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,744 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
ECED61AA10F9885E006B4DC9 /* thttp_auth.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61A910F9885E006B4DC9 /* thttp_auth.h */; };
ECED61AD10F98876006B4DC9 /* thttp.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61AB10F98876006B4DC9 /* thttp.h */; };
ECED61AE10F98876006B4DC9 /* tinyhttp_config.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61AC10F98876006B4DC9 /* tinyhttp_config.h */; };
ECED61B210F98893006B4DC9 /* thttp.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61AF10F98893006B4DC9 /* thttp.c */; };
ECED61B310F98893006B4DC9 /* thttp_message.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61B010F98893006B4DC9 /* thttp_message.c */; };
ECED61B410F98893006B4DC9 /* thttp_utl.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61B110F98893006B4DC9 /* thttp_utl.c */; };
ECED61B610F988B3006B4DC9 /* thttp_auth.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61B510F988B3006B4DC9 /* thttp_auth.c */; };
ECED61F610F98926006B4DC9 /* tinySAK_config.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61C110F98926006B4DC9 /* tinySAK_config.h */; };
ECED61F710F98926006B4DC9 /* tsk.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61C210F98926006B4DC9 /* tsk.c */; };
ECED61F810F98926006B4DC9 /* tsk.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61C310F98926006B4DC9 /* tsk.h */; };
ECED61F910F98926006B4DC9 /* tsk_base64.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61C410F98926006B4DC9 /* tsk_base64.c */; };
ECED61FA10F98926006B4DC9 /* tsk_base64.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61C510F98926006B4DC9 /* tsk_base64.h */; };
ECED61FB10F98926006B4DC9 /* tsk_binaryutils.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61C610F98926006B4DC9 /* tsk_binaryutils.c */; };
ECED61FC10F98926006B4DC9 /* tsk_binaryutils.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61C710F98926006B4DC9 /* tsk_binaryutils.h */; };
ECED61FD10F98926006B4DC9 /* tsk_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61C810F98926006B4DC9 /* tsk_buffer.c */; };
ECED61FE10F98926006B4DC9 /* tsk_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61C910F98926006B4DC9 /* tsk_buffer.h */; };
ECED61FF10F98926006B4DC9 /* tsk_condwait.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61CA10F98926006B4DC9 /* tsk_condwait.c */; };
ECED620010F98926006B4DC9 /* tsk_condwait.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61CB10F98926006B4DC9 /* tsk_condwait.h */; };
ECED620110F98926006B4DC9 /* tsk_debug.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61CC10F98926006B4DC9 /* tsk_debug.c */; };
ECED620210F98926006B4DC9 /* tsk_debug.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61CD10F98926006B4DC9 /* tsk_debug.h */; };
ECED620310F98926006B4DC9 /* tsk_errno.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61CE10F98926006B4DC9 /* tsk_errno.h */; };
ECED620410F98926006B4DC9 /* tsk_heap.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61CF10F98926006B4DC9 /* tsk_heap.c */; };
ECED620510F98926006B4DC9 /* tsk_heap.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61D010F98926006B4DC9 /* tsk_heap.h */; };
ECED620610F98926006B4DC9 /* tsk_hmac.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61D110F98926006B4DC9 /* tsk_hmac.c */; };
ECED620710F98926006B4DC9 /* tsk_hmac.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61D210F98926006B4DC9 /* tsk_hmac.h */; };
ECED620810F98926006B4DC9 /* tsk_list.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61D310F98926006B4DC9 /* tsk_list.c */; };
ECED620910F98926006B4DC9 /* tsk_list.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61D410F98926006B4DC9 /* tsk_list.h */; };
ECED620A10F98926006B4DC9 /* tsk_macros.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61D510F98926006B4DC9 /* tsk_macros.h */; };
ECED620B10F98926006B4DC9 /* tsk_md5.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61D610F98926006B4DC9 /* tsk_md5.c */; };
ECED620C10F98926006B4DC9 /* tsk_md5.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61D710F98926006B4DC9 /* tsk_md5.h */; };
ECED620D10F98926006B4DC9 /* tsk_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61D810F98926006B4DC9 /* tsk_memory.c */; };
ECED620E10F98926006B4DC9 /* tsk_memory.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61D910F98926006B4DC9 /* tsk_memory.h */; };
ECED620F10F98926006B4DC9 /* tsk_mutex.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61DA10F98926006B4DC9 /* tsk_mutex.c */; };
ECED621010F98926006B4DC9 /* tsk_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61DB10F98926006B4DC9 /* tsk_mutex.h */; };
ECED621110F98926006B4DC9 /* tsk_object.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61DC10F98926006B4DC9 /* tsk_object.c */; };
ECED621210F98926006B4DC9 /* tsk_object.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61DD10F98926006B4DC9 /* tsk_object.h */; };
ECED621310F98926006B4DC9 /* tsk_params.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61DE10F98926006B4DC9 /* tsk_params.c */; };
ECED621410F98926006B4DC9 /* tsk_params.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61DF10F98926006B4DC9 /* tsk_params.h */; };
ECED621510F98926006B4DC9 /* tsk_ppfcs16.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61E010F98926006B4DC9 /* tsk_ppfcs16.c */; };
ECED621610F98926006B4DC9 /* tsk_ppfcs16.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61E110F98926006B4DC9 /* tsk_ppfcs16.h */; };
ECED621710F98926006B4DC9 /* tsk_runnable.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61E210F98926006B4DC9 /* tsk_runnable.c */; };
ECED621810F98926006B4DC9 /* tsk_runnable.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61E310F98926006B4DC9 /* tsk_runnable.h */; };
ECED621910F98926006B4DC9 /* tsk_safeobj.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61E410F98926006B4DC9 /* tsk_safeobj.c */; };
ECED621A10F98926006B4DC9 /* tsk_safeobj.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61E510F98926006B4DC9 /* tsk_safeobj.h */; };
ECED621B10F98926006B4DC9 /* tsk_semaphore.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61E610F98926006B4DC9 /* tsk_semaphore.c */; };
ECED621C10F98926006B4DC9 /* tsk_semaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61E710F98926006B4DC9 /* tsk_semaphore.h */; };
ECED621D10F98926006B4DC9 /* tsk_sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61E810F98926006B4DC9 /* tsk_sha1.c */; };
ECED621E10F98926006B4DC9 /* tsk_sha1.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61E910F98926006B4DC9 /* tsk_sha1.h */; };
ECED621F10F98926006B4DC9 /* tsk_string.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61EA10F98926006B4DC9 /* tsk_string.c */; };
ECED622010F98926006B4DC9 /* tsk_string.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61EB10F98926006B4DC9 /* tsk_string.h */; };
ECED622110F98926006B4DC9 /* tsk_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61EC10F98926006B4DC9 /* tsk_thread.c */; };
ECED622210F98926006B4DC9 /* tsk_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61ED10F98926006B4DC9 /* tsk_thread.h */; };
ECED622310F98926006B4DC9 /* tsk_time.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61EE10F98926006B4DC9 /* tsk_time.c */; };
ECED622410F98926006B4DC9 /* tsk_time.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61EF10F98926006B4DC9 /* tsk_time.h */; };
ECED622510F98926006B4DC9 /* tsk_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61F010F98926006B4DC9 /* tsk_timer.c */; };
ECED622610F98926006B4DC9 /* tsk_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61F110F98926006B4DC9 /* tsk_timer.h */; };
ECED622710F98926006B4DC9 /* tsk_url.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61F210F98926006B4DC9 /* tsk_url.c */; };
ECED622810F98926006B4DC9 /* tsk_url.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61F310F98926006B4DC9 /* tsk_url.h */; };
ECED622910F98926006B4DC9 /* tsk_xml.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED61F410F98926006B4DC9 /* tsk_xml.c */; };
ECED622A10F98926006B4DC9 /* tsk_xml.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED61F510F98926006B4DC9 /* tsk_xml.h */; };
ECED622F10F989A3006B4DC9 /* libtinySAK.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = ECED61BC10F988E7006B4DC9 /* libtinySAK.dylib */; };
ECED624810F98B6A006B4DC9 /* stdafx.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED624210F98B6A006B4DC9 /* stdafx.c */; };
ECED624910F98B6A006B4DC9 /* test.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED624510F98B6A006B4DC9 /* test.c */; };
ECED624F10F98B8B006B4DC9 /* libtinyHTTP.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC0630554660B00DB518D /* libtinyHTTP.dylib */; };
ECED625010F98B8B006B4DC9 /* libtinySAK.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = ECED61BC10F988E7006B4DC9 /* libtinySAK.dylib */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
ECED622D10F9899F006B4DC9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = ECED61BB10F988E7006B4DC9 /* tinySAK */;
remoteInfo = tinySAK;
};
ECED624B10F98B85006B4DC9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = D2AAC0620554660B00DB518D /* tinyHTTP */;
remoteInfo = tinyHTTP;
};
ECED624D10F98B85006B4DC9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = ECED61BB10F988E7006B4DC9 /* tinySAK */;
remoteInfo = tinySAK;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
D2AAC0630554660B00DB518D /* libtinyHTTP.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libtinyHTTP.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
ECED61A610F98820006B4DC9 /* http.abnf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = http.abnf; path = ../../tinyHTTP/abnf/http.abnf; sourceTree = SOURCE_ROOT; };
ECED61A710F98820006B4DC9 /* httpauth.abnf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = httpauth.abnf; path = ../../tinyHTTP/abnf/httpauth.abnf; sourceTree = SOURCE_ROOT; };
ECED61A810F98820006B4DC9 /* uri.abnf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = uri.abnf; path = ../../tinyHTTP/abnf/uri.abnf; sourceTree = SOURCE_ROOT; };
ECED61A910F9885E006B4DC9 /* thttp_auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thttp_auth.h; path = ../../tinyHTTP/include/tinyHTTP/auth/thttp_auth.h; sourceTree = SOURCE_ROOT; };
ECED61AB10F98876006B4DC9 /* thttp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thttp.h; path = ../../tinyHTTP/include/thttp.h; sourceTree = SOURCE_ROOT; };
ECED61AC10F98876006B4DC9 /* tinyhttp_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinyhttp_config.h; path = ../../tinyHTTP/include/tinyhttp_config.h; sourceTree = SOURCE_ROOT; };
ECED61AF10F98893006B4DC9 /* thttp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thttp.c; path = ../../tinyHTTP/source/thttp.c; sourceTree = SOURCE_ROOT; };
ECED61B010F98893006B4DC9 /* thttp_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thttp_message.c; path = ../../tinyHTTP/source/thttp_message.c; sourceTree = SOURCE_ROOT; };
ECED61B110F98893006B4DC9 /* thttp_utl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thttp_utl.c; path = ../../tinyHTTP/source/thttp_utl.c; sourceTree = SOURCE_ROOT; };
ECED61B510F988B3006B4DC9 /* thttp_auth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thttp_auth.c; path = ../../tinyHTTP/source/auth/thttp_auth.c; sourceTree = SOURCE_ROOT; };
ECED61BC10F988E7006B4DC9 /* libtinySAK.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libtinySAK.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
ECED61C110F98926006B4DC9 /* tinySAK_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinySAK_config.h; path = ../../tinySAK/src/tinySAK_config.h; sourceTree = SOURCE_ROOT; };
ECED61C210F98926006B4DC9 /* tsk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk.c; path = ../../tinySAK/src/tsk.c; sourceTree = SOURCE_ROOT; };
ECED61C310F98926006B4DC9 /* tsk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk.h; path = ../../tinySAK/src/tsk.h; sourceTree = SOURCE_ROOT; };
ECED61C410F98926006B4DC9 /* tsk_base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_base64.c; path = ../../tinySAK/src/tsk_base64.c; sourceTree = SOURCE_ROOT; };
ECED61C510F98926006B4DC9 /* tsk_base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_base64.h; path = ../../tinySAK/src/tsk_base64.h; sourceTree = SOURCE_ROOT; };
ECED61C610F98926006B4DC9 /* tsk_binaryutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_binaryutils.c; path = ../../tinySAK/src/tsk_binaryutils.c; sourceTree = SOURCE_ROOT; };
ECED61C710F98926006B4DC9 /* tsk_binaryutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_binaryutils.h; path = ../../tinySAK/src/tsk_binaryutils.h; sourceTree = SOURCE_ROOT; };
ECED61C810F98926006B4DC9 /* tsk_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_buffer.c; path = ../../tinySAK/src/tsk_buffer.c; sourceTree = SOURCE_ROOT; };
ECED61C910F98926006B4DC9 /* tsk_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_buffer.h; path = ../../tinySAK/src/tsk_buffer.h; sourceTree = SOURCE_ROOT; };
ECED61CA10F98926006B4DC9 /* tsk_condwait.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_condwait.c; path = ../../tinySAK/src/tsk_condwait.c; sourceTree = SOURCE_ROOT; };
ECED61CB10F98926006B4DC9 /* tsk_condwait.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_condwait.h; path = ../../tinySAK/src/tsk_condwait.h; sourceTree = SOURCE_ROOT; };
ECED61CC10F98926006B4DC9 /* tsk_debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_debug.c; path = ../../tinySAK/src/tsk_debug.c; sourceTree = SOURCE_ROOT; };
ECED61CD10F98926006B4DC9 /* tsk_debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_debug.h; path = ../../tinySAK/src/tsk_debug.h; sourceTree = SOURCE_ROOT; };
ECED61CE10F98926006B4DC9 /* tsk_errno.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_errno.h; path = ../../tinySAK/src/tsk_errno.h; sourceTree = SOURCE_ROOT; };
ECED61CF10F98926006B4DC9 /* tsk_heap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_heap.c; path = ../../tinySAK/src/tsk_heap.c; sourceTree = SOURCE_ROOT; };
ECED61D010F98926006B4DC9 /* tsk_heap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_heap.h; path = ../../tinySAK/src/tsk_heap.h; sourceTree = SOURCE_ROOT; };
ECED61D110F98926006B4DC9 /* tsk_hmac.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_hmac.c; path = ../../tinySAK/src/tsk_hmac.c; sourceTree = SOURCE_ROOT; };
ECED61D210F98926006B4DC9 /* tsk_hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_hmac.h; path = ../../tinySAK/src/tsk_hmac.h; sourceTree = SOURCE_ROOT; };
ECED61D310F98926006B4DC9 /* tsk_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_list.c; path = ../../tinySAK/src/tsk_list.c; sourceTree = SOURCE_ROOT; };
ECED61D410F98926006B4DC9 /* tsk_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_list.h; path = ../../tinySAK/src/tsk_list.h; sourceTree = SOURCE_ROOT; };
ECED61D510F98926006B4DC9 /* tsk_macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_macros.h; path = ../../tinySAK/src/tsk_macros.h; sourceTree = SOURCE_ROOT; };
ECED61D610F98926006B4DC9 /* tsk_md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_md5.c; path = ../../tinySAK/src/tsk_md5.c; sourceTree = SOURCE_ROOT; };
ECED61D710F98926006B4DC9 /* tsk_md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_md5.h; path = ../../tinySAK/src/tsk_md5.h; sourceTree = SOURCE_ROOT; };
ECED61D810F98926006B4DC9 /* tsk_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_memory.c; path = ../../tinySAK/src/tsk_memory.c; sourceTree = SOURCE_ROOT; };
ECED61D910F98926006B4DC9 /* tsk_memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_memory.h; path = ../../tinySAK/src/tsk_memory.h; sourceTree = SOURCE_ROOT; };
ECED61DA10F98926006B4DC9 /* tsk_mutex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_mutex.c; path = ../../tinySAK/src/tsk_mutex.c; sourceTree = SOURCE_ROOT; };
ECED61DB10F98926006B4DC9 /* tsk_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_mutex.h; path = ../../tinySAK/src/tsk_mutex.h; sourceTree = SOURCE_ROOT; };
ECED61DC10F98926006B4DC9 /* tsk_object.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_object.c; path = ../../tinySAK/src/tsk_object.c; sourceTree = SOURCE_ROOT; };
ECED61DD10F98926006B4DC9 /* tsk_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_object.h; path = ../../tinySAK/src/tsk_object.h; sourceTree = SOURCE_ROOT; };
ECED61DE10F98926006B4DC9 /* tsk_params.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_params.c; path = ../../tinySAK/src/tsk_params.c; sourceTree = SOURCE_ROOT; };
ECED61DF10F98926006B4DC9 /* tsk_params.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_params.h; path = ../../tinySAK/src/tsk_params.h; sourceTree = SOURCE_ROOT; };
ECED61E010F98926006B4DC9 /* tsk_ppfcs16.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_ppfcs16.c; path = ../../tinySAK/src/tsk_ppfcs16.c; sourceTree = SOURCE_ROOT; };
ECED61E110F98926006B4DC9 /* tsk_ppfcs16.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_ppfcs16.h; path = ../../tinySAK/src/tsk_ppfcs16.h; sourceTree = SOURCE_ROOT; };
ECED61E210F98926006B4DC9 /* tsk_runnable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_runnable.c; path = ../../tinySAK/src/tsk_runnable.c; sourceTree = SOURCE_ROOT; };
ECED61E310F98926006B4DC9 /* tsk_runnable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_runnable.h; path = ../../tinySAK/src/tsk_runnable.h; sourceTree = SOURCE_ROOT; };
ECED61E410F98926006B4DC9 /* tsk_safeobj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_safeobj.c; path = ../../tinySAK/src/tsk_safeobj.c; sourceTree = SOURCE_ROOT; };
ECED61E510F98926006B4DC9 /* tsk_safeobj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_safeobj.h; path = ../../tinySAK/src/tsk_safeobj.h; sourceTree = SOURCE_ROOT; };
ECED61E610F98926006B4DC9 /* tsk_semaphore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_semaphore.c; path = ../../tinySAK/src/tsk_semaphore.c; sourceTree = SOURCE_ROOT; };
ECED61E710F98926006B4DC9 /* tsk_semaphore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_semaphore.h; path = ../../tinySAK/src/tsk_semaphore.h; sourceTree = SOURCE_ROOT; };
ECED61E810F98926006B4DC9 /* tsk_sha1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_sha1.c; path = ../../tinySAK/src/tsk_sha1.c; sourceTree = SOURCE_ROOT; };
ECED61E910F98926006B4DC9 /* tsk_sha1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_sha1.h; path = ../../tinySAK/src/tsk_sha1.h; sourceTree = SOURCE_ROOT; };
ECED61EA10F98926006B4DC9 /* tsk_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_string.c; path = ../../tinySAK/src/tsk_string.c; sourceTree = SOURCE_ROOT; };
ECED61EB10F98926006B4DC9 /* tsk_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_string.h; path = ../../tinySAK/src/tsk_string.h; sourceTree = SOURCE_ROOT; };
ECED61EC10F98926006B4DC9 /* tsk_thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_thread.c; path = ../../tinySAK/src/tsk_thread.c; sourceTree = SOURCE_ROOT; };
ECED61ED10F98926006B4DC9 /* tsk_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_thread.h; path = ../../tinySAK/src/tsk_thread.h; sourceTree = SOURCE_ROOT; };
ECED61EE10F98926006B4DC9 /* tsk_time.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_time.c; path = ../../tinySAK/src/tsk_time.c; sourceTree = SOURCE_ROOT; };
ECED61EF10F98926006B4DC9 /* tsk_time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_time.h; path = ../../tinySAK/src/tsk_time.h; sourceTree = SOURCE_ROOT; };
ECED61F010F98926006B4DC9 /* tsk_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_timer.c; path = ../../tinySAK/src/tsk_timer.c; sourceTree = SOURCE_ROOT; };
ECED61F110F98926006B4DC9 /* tsk_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_timer.h; path = ../../tinySAK/src/tsk_timer.h; sourceTree = SOURCE_ROOT; };
ECED61F210F98926006B4DC9 /* tsk_url.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_url.c; path = ../../tinySAK/src/tsk_url.c; sourceTree = SOURCE_ROOT; };
ECED61F310F98926006B4DC9 /* tsk_url.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_url.h; path = ../../tinySAK/src/tsk_url.h; sourceTree = SOURCE_ROOT; };
ECED61F410F98926006B4DC9 /* tsk_xml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_xml.c; path = ../../tinySAK/src/tsk_xml.c; sourceTree = SOURCE_ROOT; };
ECED61F510F98926006B4DC9 /* tsk_xml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_xml.h; path = ../../tinySAK/src/tsk_xml.h; sourceTree = SOURCE_ROOT; };
ECED623D10F98B46006B4DC9 /* test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test; sourceTree = BUILT_PRODUCTS_DIR; };
ECED624210F98B6A006B4DC9 /* stdafx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stdafx.c; path = ../../tinyHTTP/test/stdafx.c; sourceTree = SOURCE_ROOT; };
ECED624310F98B6A006B4DC9 /* stdafx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = ../../tinyHTTP/test/stdafx.h; sourceTree = SOURCE_ROOT; };
ECED624410F98B6A006B4DC9 /* targetver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = targetver.h; path = ../../tinyHTTP/test/targetver.h; sourceTree = SOURCE_ROOT; };
ECED624510F98B6A006B4DC9 /* test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = test.c; path = ../../tinyHTTP/test/test.c; sourceTree = SOURCE_ROOT; };
ECED624610F98B6A006B4DC9 /* test.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = test.vcproj; path = ../../tinyHTTP/test/test.vcproj; sourceTree = SOURCE_ROOT; };
ECED624710F98B6A006B4DC9 /* test_auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_auth.h; path = ../../tinyHTTP/test/test_auth.h; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D289988505E68E00004EDB86 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ECED622F10F989A3006B4DC9 /* libtinySAK.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED61BA10F988E7006B4DC9 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED623B10F98B46006B4DC9 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ECED624F10F98B8B006B4DC9 /* libtinyHTTP.dylib in Frameworks */,
ECED625010F98B8B006B4DC9 /* libtinySAK.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
08FB7794FE84155DC02AAC07 /* tinyHTTP */ = {
isa = PBXGroup;
children = (
ECED624210F98B6A006B4DC9 /* stdafx.c */,
ECED624310F98B6A006B4DC9 /* stdafx.h */,
ECED624410F98B6A006B4DC9 /* targetver.h */,
ECED624510F98B6A006B4DC9 /* test.c */,
ECED624610F98B6A006B4DC9 /* test.vcproj */,
ECED624710F98B6A006B4DC9 /* test_auth.h */,
ECED623910F98B38006B4DC9 /* test */,
ECED61BF10F988F6006B4DC9 /* tinySAK */,
ECED619F10F987B4006B4DC9 /* ragel */,
ECED619E10F987A5006B4DC9 /* abnf */,
ECED619D10F9878B006B4DC9 /* include */,
08FB7795FE84155DC02AAC07 /* Source */,
1AB674ADFE9D54B511CA2CBB /* Products */,
);
name = tinyHTTP;
sourceTree = "<group>";
};
08FB7795FE84155DC02AAC07 /* Source */ = {
isa = PBXGroup;
children = (
ECED61AF10F98893006B4DC9 /* thttp.c */,
ECED61B010F98893006B4DC9 /* thttp_message.c */,
ECED61B110F98893006B4DC9 /* thttp_utl.c */,
ECED61A210F987D2006B4DC9 /* parsers */,
ECED61A110F987CA006B4DC9 /* headers */,
ECED61A010F987C2006B4DC9 /* auth */,
);
name = Source;
sourceTree = "<group>";
};
1AB674ADFE9D54B511CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
D2AAC0630554660B00DB518D /* libtinyHTTP.dylib */,
ECED61BC10F988E7006B4DC9 /* libtinySAK.dylib */,
ECED623D10F98B46006B4DC9 /* test */,
);
name = Products;
sourceTree = "<group>";
};
ECED619D10F9878B006B4DC9 /* include */ = {
isa = PBXGroup;
children = (
ECED61AB10F98876006B4DC9 /* thttp.h */,
ECED61AC10F98876006B4DC9 /* tinyhttp_config.h */,
ECED61A510F987F3006B4DC9 /* headers */,
ECED61A410F987EA006B4DC9 /* parsers */,
ECED61A310F987E3006B4DC9 /* auth */,
);
name = include;
sourceTree = "<group>";
};
ECED619E10F987A5006B4DC9 /* abnf */ = {
isa = PBXGroup;
children = (
ECED61A610F98820006B4DC9 /* http.abnf */,
ECED61A710F98820006B4DC9 /* httpauth.abnf */,
ECED61A810F98820006B4DC9 /* uri.abnf */,
);
name = abnf;
sourceTree = "<group>";
};
ECED619F10F987B4006B4DC9 /* ragel */ = {
isa = PBXGroup;
children = (
);
name = ragel;
sourceTree = "<group>";
};
ECED61A010F987C2006B4DC9 /* auth */ = {
isa = PBXGroup;
children = (
ECED61B510F988B3006B4DC9 /* thttp_auth.c */,
);
name = auth;
sourceTree = "<group>";
};
ECED61A110F987CA006B4DC9 /* headers */ = {
isa = PBXGroup;
children = (
);
name = headers;
sourceTree = "<group>";
};
ECED61A210F987D2006B4DC9 /* parsers */ = {
isa = PBXGroup;
children = (
);
name = parsers;
sourceTree = "<group>";
};
ECED61A310F987E3006B4DC9 /* auth */ = {
isa = PBXGroup;
children = (
ECED61A910F9885E006B4DC9 /* thttp_auth.h */,
);
name = auth;
sourceTree = "<group>";
};
ECED61A410F987EA006B4DC9 /* parsers */ = {
isa = PBXGroup;
children = (
);
name = parsers;
sourceTree = "<group>";
};
ECED61A510F987F3006B4DC9 /* headers */ = {
isa = PBXGroup;
children = (
);
name = headers;
sourceTree = "<group>";
};
ECED61BF10F988F6006B4DC9 /* tinySAK */ = {
isa = PBXGroup;
children = (
ECED61C110F98926006B4DC9 /* tinySAK_config.h */,
ECED61C210F98926006B4DC9 /* tsk.c */,
ECED61C310F98926006B4DC9 /* tsk.h */,
ECED61C410F98926006B4DC9 /* tsk_base64.c */,
ECED61C510F98926006B4DC9 /* tsk_base64.h */,
ECED61C610F98926006B4DC9 /* tsk_binaryutils.c */,
ECED61C710F98926006B4DC9 /* tsk_binaryutils.h */,
ECED61C810F98926006B4DC9 /* tsk_buffer.c */,
ECED61C910F98926006B4DC9 /* tsk_buffer.h */,
ECED61CA10F98926006B4DC9 /* tsk_condwait.c */,
ECED61CB10F98926006B4DC9 /* tsk_condwait.h */,
ECED61CC10F98926006B4DC9 /* tsk_debug.c */,
ECED61CD10F98926006B4DC9 /* tsk_debug.h */,
ECED61CE10F98926006B4DC9 /* tsk_errno.h */,
ECED61CF10F98926006B4DC9 /* tsk_heap.c */,
ECED61D010F98926006B4DC9 /* tsk_heap.h */,
ECED61D110F98926006B4DC9 /* tsk_hmac.c */,
ECED61D210F98926006B4DC9 /* tsk_hmac.h */,
ECED61D310F98926006B4DC9 /* tsk_list.c */,
ECED61D410F98926006B4DC9 /* tsk_list.h */,
ECED61D510F98926006B4DC9 /* tsk_macros.h */,
ECED61D610F98926006B4DC9 /* tsk_md5.c */,
ECED61D710F98926006B4DC9 /* tsk_md5.h */,
ECED61D810F98926006B4DC9 /* tsk_memory.c */,
ECED61D910F98926006B4DC9 /* tsk_memory.h */,
ECED61DA10F98926006B4DC9 /* tsk_mutex.c */,
ECED61DB10F98926006B4DC9 /* tsk_mutex.h */,
ECED61DC10F98926006B4DC9 /* tsk_object.c */,
ECED61DD10F98926006B4DC9 /* tsk_object.h */,
ECED61DE10F98926006B4DC9 /* tsk_params.c */,
ECED61DF10F98926006B4DC9 /* tsk_params.h */,
ECED61E010F98926006B4DC9 /* tsk_ppfcs16.c */,
ECED61E110F98926006B4DC9 /* tsk_ppfcs16.h */,
ECED61E210F98926006B4DC9 /* tsk_runnable.c */,
ECED61E310F98926006B4DC9 /* tsk_runnable.h */,
ECED61E410F98926006B4DC9 /* tsk_safeobj.c */,
ECED61E510F98926006B4DC9 /* tsk_safeobj.h */,
ECED61E610F98926006B4DC9 /* tsk_semaphore.c */,
ECED61E710F98926006B4DC9 /* tsk_semaphore.h */,
ECED61E810F98926006B4DC9 /* tsk_sha1.c */,
ECED61E910F98926006B4DC9 /* tsk_sha1.h */,
ECED61EA10F98926006B4DC9 /* tsk_string.c */,
ECED61EB10F98926006B4DC9 /* tsk_string.h */,
ECED61EC10F98926006B4DC9 /* tsk_thread.c */,
ECED61ED10F98926006B4DC9 /* tsk_thread.h */,
ECED61EE10F98926006B4DC9 /* tsk_time.c */,
ECED61EF10F98926006B4DC9 /* tsk_time.h */,
ECED61F010F98926006B4DC9 /* tsk_timer.c */,
ECED61F110F98926006B4DC9 /* tsk_timer.h */,
ECED61F210F98926006B4DC9 /* tsk_url.c */,
ECED61F310F98926006B4DC9 /* tsk_url.h */,
ECED61F410F98926006B4DC9 /* tsk_xml.c */,
ECED61F510F98926006B4DC9 /* tsk_xml.h */,
);
name = tinySAK;
sourceTree = "<group>";
};
ECED623910F98B38006B4DC9 /* test */ = {
isa = PBXGroup;
children = (
);
name = test;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D2AAC0600554660B00DB518D /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
ECED61AA10F9885E006B4DC9 /* thttp_auth.h in Headers */,
ECED61AD10F98876006B4DC9 /* thttp.h in Headers */,
ECED61AE10F98876006B4DC9 /* tinyhttp_config.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED61B810F988E7006B4DC9 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
ECED61F610F98926006B4DC9 /* tinySAK_config.h in Headers */,
ECED61F810F98926006B4DC9 /* tsk.h in Headers */,
ECED61FA10F98926006B4DC9 /* tsk_base64.h in Headers */,
ECED61FC10F98926006B4DC9 /* tsk_binaryutils.h in Headers */,
ECED61FE10F98926006B4DC9 /* tsk_buffer.h in Headers */,
ECED620010F98926006B4DC9 /* tsk_condwait.h in Headers */,
ECED620210F98926006B4DC9 /* tsk_debug.h in Headers */,
ECED620310F98926006B4DC9 /* tsk_errno.h in Headers */,
ECED620510F98926006B4DC9 /* tsk_heap.h in Headers */,
ECED620710F98926006B4DC9 /* tsk_hmac.h in Headers */,
ECED620910F98926006B4DC9 /* tsk_list.h in Headers */,
ECED620A10F98926006B4DC9 /* tsk_macros.h in Headers */,
ECED620C10F98926006B4DC9 /* tsk_md5.h in Headers */,
ECED620E10F98926006B4DC9 /* tsk_memory.h in Headers */,
ECED621010F98926006B4DC9 /* tsk_mutex.h in Headers */,
ECED621210F98926006B4DC9 /* tsk_object.h in Headers */,
ECED621410F98926006B4DC9 /* tsk_params.h in Headers */,
ECED621610F98926006B4DC9 /* tsk_ppfcs16.h in Headers */,
ECED621810F98926006B4DC9 /* tsk_runnable.h in Headers */,
ECED621A10F98926006B4DC9 /* tsk_safeobj.h in Headers */,
ECED621C10F98926006B4DC9 /* tsk_semaphore.h in Headers */,
ECED621E10F98926006B4DC9 /* tsk_sha1.h in Headers */,
ECED622010F98926006B4DC9 /* tsk_string.h in Headers */,
ECED622210F98926006B4DC9 /* tsk_thread.h in Headers */,
ECED622410F98926006B4DC9 /* tsk_time.h in Headers */,
ECED622610F98926006B4DC9 /* tsk_timer.h in Headers */,
ECED622810F98926006B4DC9 /* tsk_url.h in Headers */,
ECED622A10F98926006B4DC9 /* tsk_xml.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D2AAC0620554660B00DB518D /* tinyHTTP */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1DEB914A08733D8E0010E9CD /* Build configuration list for PBXNativeTarget "tinyHTTP" */;
buildPhases = (
D2AAC0600554660B00DB518D /* Headers */,
D2AAC0610554660B00DB518D /* Sources */,
D289988505E68E00004EDB86 /* Frameworks */,
);
buildRules = (
);
dependencies = (
ECED622E10F9899F006B4DC9 /* PBXTargetDependency */,
);
name = tinyHTTP;
productName = tinyHTTP;
productReference = D2AAC0630554660B00DB518D /* libtinyHTTP.dylib */;
productType = "com.apple.product-type.library.dynamic";
};
ECED61BB10F988E7006B4DC9 /* tinySAK */ = {
isa = PBXNativeTarget;
buildConfigurationList = ECED61C010F988F6006B4DC9 /* Build configuration list for PBXNativeTarget "tinySAK" */;
buildPhases = (
ECED61B810F988E7006B4DC9 /* Headers */,
ECED61B910F988E7006B4DC9 /* Sources */,
ECED61BA10F988E7006B4DC9 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = tinySAK;
productName = tinySAK;
productReference = ECED61BC10F988E7006B4DC9 /* libtinySAK.dylib */;
productType = "com.apple.product-type.library.dynamic";
};
ECED623C10F98B46006B4DC9 /* test */ = {
isa = PBXNativeTarget;
buildConfigurationList = ECED624110F98B65006B4DC9 /* Build configuration list for PBXNativeTarget "test" */;
buildPhases = (
ECED623A10F98B46006B4DC9 /* Sources */,
ECED623B10F98B46006B4DC9 /* Frameworks */,
);
buildRules = (
);
dependencies = (
ECED624C10F98B85006B4DC9 /* PBXTargetDependency */,
ECED624E10F98B85006B4DC9 /* PBXTargetDependency */,
);
name = test;
productName = test;
productReference = ECED623D10F98B46006B4DC9 /* test */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
08FB7793FE84155DC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "tinyHTTP" */;
compatibilityVersion = "Xcode 3.1";
hasScannedForEncodings = 1;
mainGroup = 08FB7794FE84155DC02AAC07 /* tinyHTTP */;
projectDirPath = "";
projectRoot = "";
targets = (
D2AAC0620554660B00DB518D /* tinyHTTP */,
ECED61BB10F988E7006B4DC9 /* tinySAK */,
ECED623C10F98B46006B4DC9 /* test */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
D2AAC0610554660B00DB518D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ECED61B210F98893006B4DC9 /* thttp.c in Sources */,
ECED61B310F98893006B4DC9 /* thttp_message.c in Sources */,
ECED61B410F98893006B4DC9 /* thttp_utl.c in Sources */,
ECED61B610F988B3006B4DC9 /* thttp_auth.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED61B910F988E7006B4DC9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ECED61F710F98926006B4DC9 /* tsk.c in Sources */,
ECED61F910F98926006B4DC9 /* tsk_base64.c in Sources */,
ECED61FB10F98926006B4DC9 /* tsk_binaryutils.c in Sources */,
ECED61FD10F98926006B4DC9 /* tsk_buffer.c in Sources */,
ECED61FF10F98926006B4DC9 /* tsk_condwait.c in Sources */,
ECED620110F98926006B4DC9 /* tsk_debug.c in Sources */,
ECED620410F98926006B4DC9 /* tsk_heap.c in Sources */,
ECED620610F98926006B4DC9 /* tsk_hmac.c in Sources */,
ECED620810F98926006B4DC9 /* tsk_list.c in Sources */,
ECED620B10F98926006B4DC9 /* tsk_md5.c in Sources */,
ECED620D10F98926006B4DC9 /* tsk_memory.c in Sources */,
ECED620F10F98926006B4DC9 /* tsk_mutex.c in Sources */,
ECED621110F98926006B4DC9 /* tsk_object.c in Sources */,
ECED621310F98926006B4DC9 /* tsk_params.c in Sources */,
ECED621510F98926006B4DC9 /* tsk_ppfcs16.c in Sources */,
ECED621710F98926006B4DC9 /* tsk_runnable.c in Sources */,
ECED621910F98926006B4DC9 /* tsk_safeobj.c in Sources */,
ECED621B10F98926006B4DC9 /* tsk_semaphore.c in Sources */,
ECED621D10F98926006B4DC9 /* tsk_sha1.c in Sources */,
ECED621F10F98926006B4DC9 /* tsk_string.c in Sources */,
ECED622110F98926006B4DC9 /* tsk_thread.c in Sources */,
ECED622310F98926006B4DC9 /* tsk_time.c in Sources */,
ECED622510F98926006B4DC9 /* tsk_timer.c in Sources */,
ECED622710F98926006B4DC9 /* tsk_url.c in Sources */,
ECED622910F98926006B4DC9 /* tsk_xml.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED623A10F98B46006B4DC9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ECED624810F98B6A006B4DC9 /* stdafx.c in Sources */,
ECED624910F98B6A006B4DC9 /* test.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
ECED622E10F9899F006B4DC9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = ECED61BB10F988E7006B4DC9 /* tinySAK */;
targetProxy = ECED622D10F9899F006B4DC9 /* PBXContainerItemProxy */;
};
ECED624C10F98B85006B4DC9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = D2AAC0620554660B00DB518D /* tinyHTTP */;
targetProxy = ECED624B10F98B85006B4DC9 /* PBXContainerItemProxy */;
};
ECED624E10F98B85006B4DC9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = ECED61BB10F988E7006B4DC9 /* tinySAK */;
targetProxy = ECED624D10F98B85006B4DC9 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
1DEB914B08733D8E0010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
EXECUTABLE_PREFIX = lib;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = ../../../doubango/tinyHTTP/include;
INSTALL_PATH = /usr/local/lib;
LIBRARY_SEARCH_PATHS = "";
PRODUCT_NAME = tinyHTTP;
};
name = Debug;
};
1DEB914C08733D8E0010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EXECUTABLE_PREFIX = lib;
GCC_MODEL_TUNING = G5;
INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = tinyHTTP;
};
name = Release;
};
1DEB914F08733D8E0010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = macosx10.5;
};
name = Debug;
};
1DEB915008733D8E0010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
SDKROOT = macosx10.5;
};
name = Release;
};
ECED61BD10F988E8006B4DC9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
EXECUTABLE_PREFIX = lib;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INSTALL_PATH = /usr/local/lib;
PREBINDING = NO;
PRODUCT_NAME = tinySAK;
};
name = Debug;
};
ECED61BE10F988E8006B4DC9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EXECUTABLE_PREFIX = lib;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_MODEL_TUNING = G5;
INSTALL_PATH = /usr/local/lib;
PREBINDING = NO;
PRODUCT_NAME = tinySAK;
ZERO_LINK = NO;
};
name = Release;
};
ECED623F10F98B47006B4DC9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = ../../../doubango/tinyHTTP/include;
INSTALL_PATH = /usr/local/bin;
PREBINDING = NO;
PRODUCT_NAME = test;
};
name = Debug;
};
ECED624010F98B47006B4DC9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_MODEL_TUNING = G5;
INSTALL_PATH = /usr/local/bin;
PREBINDING = NO;
PRODUCT_NAME = test;
ZERO_LINK = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1DEB914A08733D8E0010E9CD /* Build configuration list for PBXNativeTarget "tinyHTTP" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB914B08733D8E0010E9CD /* Debug */,
1DEB914C08733D8E0010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "tinyHTTP" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB914F08733D8E0010E9CD /* Debug */,
1DEB915008733D8E0010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
ECED61C010F988F6006B4DC9 /* Build configuration list for PBXNativeTarget "tinySAK" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ECED61BD10F988E8006B4DC9 /* Debug */,
ECED61BE10F988E8006B4DC9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
ECED624110F98B65006B4DC9 /* Build configuration list for PBXNativeTarget "test" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ECED623F10F98B47006B4DC9 /* Debug */,
ECED624010F98B47006B4DC9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
}

File diff suppressed because it is too large Load Diff

View File

@ -590,6 +590,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DDEBUG_LEVEL=DEBUG_LEVEL_INFO";
PREBINDING = NO; PREBINDING = NO;
SDKROOT = macosx10.5; SDKROOT = macosx10.5;
}; };

View File

@ -228,8 +228,6 @@
<key>Layout</key> <key>Layout</key>
<array> <array>
<dict> <dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key> <key>ContentConfiguration</key>
<dict> <dict>
<key>PBXBottomSmartGroupGIDs</key> <key>PBXBottomSmartGroupGIDs</key>
@ -268,6 +266,7 @@
<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
<array> <array>
<string>08FB7794FE84155DC02AAC07</string> <string>08FB7794FE84155DC02AAC07</string>
<string>EC6C560C10EDE6E9000E1B18</string>
<string>1C37FBAC04509CD000000102</string> <string>1C37FBAC04509CD000000102</string>
<string>1C37FAAC04509CD000000102</string> <string>1C37FAAC04509CD000000102</string>
<string>1C37FABC05509CD000000102</string> <string>1C37FABC05509CD000000102</string>
@ -275,7 +274,9 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array> <array>
<array> <array>
<integer>13</integer> <integer>20</integer>
<integer>1</integer>
<integer>0</integer>
</array> </array>
</array> </array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
@ -300,7 +301,7 @@
<real>164</real> <real>164</real>
</array> </array>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>434 256 1409 922 0 0 1920 1178 </string> <string>166 234 1409 922 0 0 1920 1178 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXSmartGroupTreeModule</string> <string>PBXSmartGroupTreeModule</string>
@ -311,6 +312,8 @@
<key>Dock</key> <key>Dock</key>
<array> <array>
<dict> <dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key> <key>ContentConfiguration</key>
<dict> <dict>
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
@ -328,11 +331,10 @@
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>EC6ACC8D10EF1356008C3507</string> <string>ECED5F8410F968A9006B4DC9</string>
<key>history</key> <key>history</key>
<array> <array>
<string>EC6C565210EDEB09000E1B18</string> <string>EC6C565210EDEB09000E1B18</string>
<string>EC6C565710EDEB09000E1B18</string>
<string>EC74E44410EE983C001624A9</string> <string>EC74E44410EE983C001624A9</string>
<string>EC74E4A410EE9DC1001624A9</string> <string>EC74E4A410EE9DC1001624A9</string>
<string>EC74E4A510EE9DC1001624A9</string> <string>EC74E4A510EE9DC1001624A9</string>
@ -344,7 +346,6 @@
<string>EC6AC9B910EECE0E008C3507</string> <string>EC6AC9B910EECE0E008C3507</string>
<string>EC6AC9BA10EECE0E008C3507</string> <string>EC6AC9BA10EECE0E008C3507</string>
<string>EC6AC9BB10EECE0E008C3507</string> <string>EC6AC9BB10EECE0E008C3507</string>
<string>EC6AC9EB10EED22F008C3507</string>
<string>EC6AC9EF10EED22F008C3507</string> <string>EC6AC9EF10EED22F008C3507</string>
<string>EC6ACA1B10EED278008C3507</string> <string>EC6ACA1B10EED278008C3507</string>
<string>EC6ACA1C10EED278008C3507</string> <string>EC6ACA1C10EED278008C3507</string>
@ -359,33 +360,37 @@
<string>EC6ACBB410EF0973008C3507</string> <string>EC6ACBB410EF0973008C3507</string>
<string>EC6ACBB510EF0973008C3507</string> <string>EC6ACBB510EF0973008C3507</string>
<string>EC6ACBB610EF0973008C3507</string> <string>EC6ACBB610EF0973008C3507</string>
<string>EC6ACBB810EF0973008C3507</string>
<string>EC6ACBB910EF0973008C3507</string>
<string>EC6ACBBA10EF0973008C3507</string> <string>EC6ACBBA10EF0973008C3507</string>
<string>EC6ACBBB10EF0973008C3507</string>
<string>EC6ACBBC10EF0973008C3507</string> <string>EC6ACBBC10EF0973008C3507</string>
<string>EC6ACBBD10EF0973008C3507</string>
<string>EC6ACBBE10EF0973008C3507</string> <string>EC6ACBBE10EF0973008C3507</string>
<string>EC6ACBBF10EF0973008C3507</string>
<string>EC6ACBC010EF0973008C3507</string> <string>EC6ACBC010EF0973008C3507</string>
<string>EC6ACBC110EF0973008C3507</string> <string>EC6ACBC110EF0973008C3507</string>
<string>EC6ACBC210EF0973008C3507</string>
<string>EC6ACBC310EF0973008C3507</string>
<string>EC6ACBC410EF0973008C3507</string> <string>EC6ACBC410EF0973008C3507</string>
<string>EC6ACBC510EF0973008C3507</string>
<string>EC6ACBC610EF0973008C3507</string> <string>EC6ACBC610EF0973008C3507</string>
<string>EC6ACBC710EF0973008C3507</string> <string>EC6ACBC710EF0973008C3507</string>
<string>EC6ACBC810EF0973008C3507</string> <string>EC6ACBC810EF0973008C3507</string>
<string>EC6ACBC910EF0973008C3507</string> <string>EC6ACBC910EF0973008C3507</string>
<string>EC6ACBCA10EF0973008C3507</string> <string>EC6ACBCA10EF0973008C3507</string>
<string>EC6ACBCB10EF0973008C3507</string> <string>EC6ACBCB10EF0973008C3507</string>
<string>EC6ACBCD10EF0973008C3507</string>
<string>EC6ACC3E10EF0BF1008C3507</string> <string>EC6ACC3E10EF0BF1008C3507</string>
<string>EC6ACC3F10EF0BF1008C3507</string> <string>EC6ACC3F10EF0BF1008C3507</string>
<string>EC6ACC4010EF0BF1008C3507</string> <string>EC6ACC4010EF0BF1008C3507</string>
<string>EC6ACC4210EF0BF1008C3507</string> <string>EC6ACC4210EF0BF1008C3507</string>
<string>EC6ACC7D10EF1061008C3507</string> <string>EC6ACC7D10EF1061008C3507</string>
<string>EC6ACC7E10EF1061008C3507</string> <string>ECD4DD9510F1439F00DB1682</string>
<string>ECD4DD9610F1439F00DB1682</string>
<string>ECD4DD9710F1439F00DB1682</string>
<string>ECD4DD9810F1439F00DB1682</string>
<string>ECD4DD9910F1439F00DB1682</string>
<string>ECD4DD9B10F1439F00DB1682</string>
<string>ECD4DD9C10F1439F00DB1682</string>
<string>ECD4DD9D10F1439F00DB1682</string>
<string>ECD2C9D810F1481C00F2B7B3</string>
<string>ECD2C9D910F1481C00F2B7B3</string>
<string>ECD2C9DA10F1481C00F2B7B3</string>
<string>ECD2C9DB10F1481C00F2B7B3</string>
<string>ECD2C9DC10F1481C00F2B7B3</string>
<string>ECD2C9F210F1481E00F2B7B3</string>
</array> </array>
<key>prevStack</key> <key>prevStack</key>
<array> <array>
@ -424,263 +429,28 @@
<string>EC6ACA5310EED607008C3507</string> <string>EC6ACA5310EED607008C3507</string>
<string>EC6ACA5D10EEE689008C3507</string> <string>EC6ACA5D10EEE689008C3507</string>
<string>EC6ACA6E10EEED43008C3507</string> <string>EC6ACA6E10EEED43008C3507</string>
<string>EC6ACA8310EEF32E008C3507</string>
<string>EC6ACA8410EEF32E008C3507</string> <string>EC6ACA8410EEF32E008C3507</string>
<string>EC6ACA8910EEF394008C3507</string>
<string>EC6ACA8A10EEF394008C3507</string>
<string>EC6ACAC110EEFAE5008C3507</string>
<string>EC6ACAC210EEFAE5008C3507</string>
<string>EC6ACAC310EEFAE5008C3507</string>
<string>EC6ACAC410EEFAE5008C3507</string>
<string>EC6ACAC510EEFAE5008C3507</string> <string>EC6ACAC510EEFAE5008C3507</string>
<string>EC6ACAC610EEFAE5008C3507</string>
<string>EC6ACAC710EEFAE5008C3507</string>
<string>EC6ACAC810EEFAE5008C3507</string>
<string>EC6ACAC910EEFAE5008C3507</string>
<string>EC6ACACA10EEFAE5008C3507</string>
<string>EC6ACACB10EEFAE5008C3507</string>
<string>EC6ACACC10EEFAE5008C3507</string>
<string>EC6ACACD10EEFAE5008C3507</string>
<string>EC6ACACE10EEFAE5008C3507</string>
<string>EC6ACACF10EEFAE5008C3507</string>
<string>EC6ACAD010EEFAE5008C3507</string>
<string>EC6ACAD110EEFAE5008C3507</string>
<string>EC6ACAD210EEFAE5008C3507</string>
<string>EC6ACAD310EEFAE5008C3507</string>
<string>EC6ACAD410EEFAE5008C3507</string>
<string>EC6ACAD510EEFAE5008C3507</string>
<string>EC6ACAD610EEFAE5008C3507</string>
<string>EC6ACAD710EEFAE5008C3507</string>
<string>EC6ACAD810EEFAE5008C3507</string>
<string>EC6ACAD910EEFAE5008C3507</string>
<string>EC6ACADA10EEFAE5008C3507</string>
<string>EC6ACADB10EEFAE5008C3507</string>
<string>EC6ACADC10EEFAE5008C3507</string> <string>EC6ACADC10EEFAE5008C3507</string>
<string>EC6ACADD10EEFAE5008C3507</string> <string>EC6ACADD10EEFAE5008C3507</string>
<string>EC6ACADE10EEFAE5008C3507</string>
<string>EC6ACADF10EEFAE5008C3507</string>
<string>EC6ACAE010EEFAE5008C3507</string>
<string>EC6ACAE110EEFAE5008C3507</string> <string>EC6ACAE110EEFAE5008C3507</string>
<string>EC6ACAE210EEFAE5008C3507</string>
<string>EC6ACAE310EEFAE5008C3507</string>
<string>EC6ACAE410EEFAE5008C3507</string>
<string>EC6ACAE510EEFAE5008C3507</string>
<string>EC6ACAE610EEFAE5008C3507</string> <string>EC6ACAE610EEFAE5008C3507</string>
<string>EC6ACAE710EEFAE5008C3507</string>
<string>EC6ACAE810EEFAE5008C3507</string> <string>EC6ACAE810EEFAE5008C3507</string>
<string>EC6ACAE910EEFAE5008C3507</string>
<string>EC6ACAEA10EEFAE5008C3507</string>
<string>EC6ACAEB10EEFAE5008C3507</string>
<string>EC6ACAEC10EEFAE5008C3507</string>
<string>EC6ACAED10EEFAE5008C3507</string>
<string>EC6ACAEE10EEFAE5008C3507</string>
<string>EC6ACAEF10EEFAE5008C3507</string>
<string>EC6ACAF010EEFAE5008C3507</string>
<string>EC6ACAF110EEFAE5008C3507</string>
<string>EC6ACAF210EEFAE5008C3507</string>
<string>EC6ACAF310EEFAE5008C3507</string>
<string>EC6ACAF410EEFAE5008C3507</string>
<string>EC6ACAF510EEFAE5008C3507</string>
<string>EC6ACAF610EEFAE5008C3507</string>
<string>EC6ACAF710EEFAE5008C3507</string>
<string>EC6ACAF810EEFAE5008C3507</string>
<string>EC6ACAF910EEFAE5008C3507</string>
<string>EC6ACAFA10EEFAE5008C3507</string> <string>EC6ACAFA10EEFAE5008C3507</string>
<string>EC6ACAFB10EEFAE5008C3507</string>
<string>EC6ACAFC10EEFAE5008C3507</string>
<string>EC6ACAFD10EEFAE5008C3507</string>
<string>EC6ACAFE10EEFAE5008C3507</string>
<string>EC6ACAFF10EEFAE5008C3507</string>
<string>EC6ACB0010EEFAE5008C3507</string>
<string>EC6ACB0110EEFAE5008C3507</string>
<string>EC6ACB0210EEFAE5008C3507</string>
<string>EC6ACB1210EEFCE4008C3507</string>
<string>EC6ACB1310EEFCE4008C3507</string>
<string>EC6ACB1410EEFCE4008C3507</string>
<string>EC6ACB1510EEFCE4008C3507</string>
<string>EC6ACB1610EEFCE4008C3507</string>
<string>EC6ACB1710EEFCE4008C3507</string>
<string>EC6ACB1810EEFCE4008C3507</string>
<string>EC6ACB1910EEFCE4008C3507</string>
<string>EC6ACB1A10EEFCE4008C3507</string>
<string>EC6ACB1B10EEFCE4008C3507</string>
<string>EC6ACB1C10EEFCE4008C3507</string>
<string>EC6ACB1D10EEFCE4008C3507</string>
<string>EC6ACB1E10EEFCE4008C3507</string>
<string>EC6ACB1F10EEFCE4008C3507</string>
<string>EC6ACB2010EEFCE4008C3507</string>
<string>EC6ACB2110EEFCE4008C3507</string>
<string>EC6ACB2210EEFCE4008C3507</string>
<string>EC6ACB3C10EEFFB2008C3507</string>
<string>EC6ACB3D10EEFFB2008C3507</string>
<string>EC6ACB3E10EEFFB2008C3507</string>
<string>EC6ACB3F10EEFFB2008C3507</string>
<string>EC6ACB4010EEFFB2008C3507</string>
<string>EC6ACB4110EEFFB2008C3507</string>
<string>EC6ACB4210EEFFB2008C3507</string>
<string>EC6ACB4310EEFFB2008C3507</string>
<string>EC6ACB4410EEFFB2008C3507</string>
<string>EC6ACB4510EEFFB2008C3507</string>
<string>EC6ACB4610EEFFB2008C3507</string>
<string>EC6ACB4710EEFFB2008C3507</string>
<string>EC6ACB4810EEFFB2008C3507</string>
<string>EC6ACB4910EEFFB2008C3507</string>
<string>EC6ACB4A10EEFFB2008C3507</string>
<string>EC6ACB4B10EEFFB2008C3507</string>
<string>EC6ACB4C10EEFFB2008C3507</string>
<string>EC6ACB4D10EEFFB2008C3507</string>
<string>EC6ACB4E10EEFFB2008C3507</string>
<string>EC6ACB4F10EEFFB2008C3507</string>
<string>EC6ACB5010EEFFB2008C3507</string>
<string>EC6ACB5110EEFFB2008C3507</string>
<string>EC6ACB5210EEFFB2008C3507</string>
<string>EC6ACB5310EEFFB2008C3507</string>
<string>EC6ACB5410EEFFB2008C3507</string>
<string>EC6ACB5510EEFFB2008C3507</string>
<string>EC6ACB5610EEFFB2008C3507</string>
<string>EC6ACB5710EEFFB2008C3507</string>
<string>EC6ACB5810EEFFB2008C3507</string>
<string>EC6ACB5910EEFFB2008C3507</string>
<string>EC6ACB5A10EEFFB2008C3507</string>
<string>EC6ACB5B10EEFFB2008C3507</string>
<string>EC6ACB5C10EEFFB2008C3507</string>
<string>EC6ACB5D10EEFFB2008C3507</string>
<string>EC6ACB5E10EEFFB2008C3507</string>
<string>EC6ACB5F10EEFFB2008C3507</string>
<string>EC6ACB6010EEFFB2008C3507</string>
<string>EC6ACB6110EEFFB2008C3507</string>
<string>EC6ACB6210EEFFB2008C3507</string>
<string>EC6ACB6310EEFFB2008C3507</string>
<string>EC6ACB6410EEFFB2008C3507</string>
<string>EC6ACB6510EEFFB2008C3507</string>
<string>EC6ACB6610EEFFB2008C3507</string>
<string>EC6ACB6710EEFFB2008C3507</string>
<string>EC6ACB6810EEFFB2008C3507</string>
<string>EC6ACB6910EEFFB2008C3507</string>
<string>EC6ACB6A10EEFFB2008C3507</string>
<string>EC6ACB6B10EEFFB2008C3507</string>
<string>EC6ACB6C10EEFFB2008C3507</string>
<string>EC6ACB6D10EEFFB2008C3507</string>
<string>EC6ACB6E10EEFFB2008C3507</string>
<string>EC6ACB6F10EEFFB2008C3507</string>
<string>EC6ACB7010EEFFB2008C3507</string>
<string>EC6ACB7110EEFFB2008C3507</string>
<string>EC6ACBCE10EF0973008C3507</string>
<string>EC6ACBCF10EF0973008C3507</string> <string>EC6ACBCF10EF0973008C3507</string>
<string>EC6ACBD010EF0973008C3507</string> <string>EC6ACBD010EF0973008C3507</string>
<string>EC6ACBD110EF0973008C3507</string> <string>EC6ACBD110EF0973008C3507</string>
<string>EC6ACBD210EF0973008C3507</string>
<string>EC6ACBD310EF0973008C3507</string>
<string>EC6ACBD410EF0973008C3507</string>
<string>EC6ACBD510EF0973008C3507</string>
<string>EC6ACBD610EF0973008C3507</string> <string>EC6ACBD610EF0973008C3507</string>
<string>EC6ACBD710EF0973008C3507</string>
<string>EC6ACBD810EF0973008C3507</string>
<string>EC6ACBD910EF0973008C3507</string>
<string>EC6ACBDA10EF0973008C3507</string>
<string>EC6ACBDB10EF0973008C3507</string>
<string>EC6ACBDC10EF0973008C3507</string>
<string>EC6ACBDD10EF0973008C3507</string>
<string>EC6ACBDE10EF0973008C3507</string>
<string>EC6ACBDF10EF0973008C3507</string>
<string>EC6ACBE010EF0973008C3507</string>
<string>EC6ACBE110EF0973008C3507</string>
<string>EC6ACBE210EF0973008C3507</string>
<string>EC6ACBE310EF0973008C3507</string>
<string>EC6ACBE410EF0973008C3507</string>
<string>EC6ACBE510EF0973008C3507</string>
<string>EC6ACBE610EF0973008C3507</string>
<string>EC6ACBE710EF0973008C3507</string>
<string>EC6ACBE810EF0973008C3507</string> <string>EC6ACBE810EF0973008C3507</string>
<string>EC6ACBE910EF0973008C3507</string>
<string>EC6ACBEA10EF0973008C3507</string>
<string>EC6ACBEB10EF0973008C3507</string>
<string>EC6ACBEC10EF0973008C3507</string>
<string>EC6ACBED10EF0973008C3507</string>
<string>EC6ACBEE10EF0973008C3507</string>
<string>EC6ACBEF10EF0973008C3507</string>
<string>EC6ACBF010EF0973008C3507</string>
<string>EC6ACBF110EF0973008C3507</string>
<string>EC6ACBF210EF0973008C3507</string>
<string>EC6ACBF310EF0973008C3507</string>
<string>EC6ACBF410EF0973008C3507</string>
<string>EC6ACBF510EF0973008C3507</string>
<string>EC6ACBF610EF0973008C3507</string>
<string>EC6ACBF710EF0973008C3507</string>
<string>EC6ACBF810EF0973008C3507</string>
<string>EC6ACBF910EF0973008C3507</string>
<string>EC6ACBFA10EF0973008C3507</string>
<string>EC6ACBFB10EF0973008C3507</string>
<string>EC6ACBFC10EF0973008C3507</string>
<string>EC6ACBFD10EF0973008C3507</string>
<string>EC6ACBFE10EF0973008C3507</string>
<string>EC6ACBFF10EF0973008C3507</string>
<string>EC6ACC0010EF0973008C3507</string>
<string>EC6ACC0110EF0973008C3507</string>
<string>EC6ACC0210EF0973008C3507</string> <string>EC6ACC0210EF0973008C3507</string>
<string>EC6ACC0310EF0973008C3507</string>
<string>EC6ACC0410EF0973008C3507</string>
<string>EC6ACC0510EF0973008C3507</string>
<string>EC6ACC0610EF0973008C3507</string>
<string>EC6ACC0710EF0973008C3507</string>
<string>EC6ACC0810EF0973008C3507</string>
<string>EC6ACC0910EF0973008C3507</string>
<string>EC6ACC0A10EF0973008C3507</string>
<string>EC6ACC0B10EF0973008C3507</string>
<string>EC6ACC0C10EF0973008C3507</string>
<string>EC6ACC0D10EF0973008C3507</string>
<string>EC6ACC0E10EF0973008C3507</string>
<string>EC6ACC0F10EF0973008C3507</string>
<string>EC6ACC1010EF0973008C3507</string>
<string>EC6ACC1110EF0973008C3507</string>
<string>EC6ACC1210EF0973008C3507</string>
<string>EC6ACC1310EF0973008C3507</string>
<string>EC6ACC1410EF0973008C3507</string>
<string>EC6ACC1510EF0973008C3507</string>
<string>EC6ACC1610EF0973008C3507</string>
<string>EC6ACC1710EF0973008C3507</string>
<string>EC6ACC1810EF0973008C3507</string>
<string>EC6ACC1910EF0973008C3507</string>
<string>EC6ACC1A10EF0973008C3507</string>
<string>EC6ACC1B10EF0973008C3507</string>
<string>EC6ACC1C10EF0973008C3507</string>
<string>EC6ACC1D10EF0973008C3507</string>
<string>EC6ACC1E10EF0973008C3507</string>
<string>EC6ACC1F10EF0973008C3507</string>
<string>EC6ACC2010EF0973008C3507</string>
<string>EC6ACC2110EF0973008C3507</string>
<string>EC6ACC2210EF0973008C3507</string> <string>EC6ACC2210EF0973008C3507</string>
<string>EC6ACC2310EF0973008C3507</string>
<string>EC6ACC2410EF0973008C3507</string> <string>EC6ACC2410EF0973008C3507</string>
<string>EC6ACC2510EF0973008C3507</string>
<string>EC6ACC2610EF0973008C3507</string>
<string>EC6ACC2710EF0973008C3507</string>
<string>EC6ACC2810EF0973008C3507</string>
<string>EC6ACC2910EF0973008C3507</string>
<string>EC6ACC2A10EF0973008C3507</string>
<string>EC6ACC2B10EF0973008C3507</string>
<string>EC6ACC2C10EF0973008C3507</string>
<string>EC6ACC2D10EF0973008C3507</string> <string>EC6ACC2D10EF0973008C3507</string>
<string>EC6ACC2E10EF0973008C3507</string>
<string>EC6ACC2F10EF0973008C3507</string> <string>EC6ACC2F10EF0973008C3507</string>
<string>EC6ACC3010EF0973008C3507</string>
<string>EC6ACC3110EF0973008C3507</string>
<string>EC6ACC3210EF0973008C3507</string>
<string>EC6ACC3310EF0973008C3507</string>
<string>EC6ACC3410EF0973008C3507</string>
<string>EC6ACC3510EF0973008C3507</string>
<string>EC6ACC3610EF0973008C3507</string>
<string>EC6ACC3710EF0973008C3507</string>
<string>EC6ACC3810EF0973008C3507</string>
<string>EC6ACC3910EF0973008C3507</string>
<string>EC6ACC4410EF0BF1008C3507</string>
<string>EC6ACC4510EF0BF1008C3507</string> <string>EC6ACC4510EF0BF1008C3507</string>
<string>EC6ACC4610EF0BF1008C3507</string>
<string>EC6ACC4710EF0BF1008C3507</string>
<string>EC6ACC4810EF0BF1008C3507</string>
<string>EC6ACC4910EF0BF1008C3507</string> <string>EC6ACC4910EF0BF1008C3507</string>
<string>EC6ACC4B10EF0BF1008C3507</string> <string>ECD4DDA810F1439F00DB1682</string>
<string>EC6ACC7F10EF1061008C3507</string> <string>ECD4DDAB10F1439F00DB1682</string>
</array> </array>
</dict> </dict>
<key>SplitCount</key> <key>SplitCount</key>
@ -694,7 +464,7 @@
<key>Frame</key> <key>Frame</key>
<string>{{0, 0}, {1201, 515}}</string> <string>{{0, 0}, {1201, 515}}</string>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>434 256 1409 922 0 0 1920 1178 </string> <string>166 234 1409 922 0 0 1920 1178 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXNavigatorGroup</string> <string>PBXNavigatorGroup</string>
@ -714,7 +484,7 @@
<key>Frame</key> <key>Frame</key>
<string>{{0, 520}, {1201, 361}}</string> <string>{{0, 520}, {1201, 361}}</string>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>434 256 1409 922 0 0 1920 1178 </string> <string>166 234 1409 922 0 0 1920 1178 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>XCDetailModule</string> <string>XCDetailModule</string>
@ -738,9 +508,9 @@
</array> </array>
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>EC6AC95510EEC5E9008C3507</string> <string>ECED5F8510F968A9006B4DC9</string>
<string>1CE0B1FE06471DED0097A5F4</string> <string>1CE0B1FE06471DED0097A5F4</string>
<string>EC6AC95610EEC5E9008C3507</string> <string>ECED5F8610F968A9006B4DC9</string>
<string>1CE0B20306471E060097A5F4</string> <string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string> <string>1CE0B20506471E060097A5F4</string>
</array> </array>
@ -874,15 +644,10 @@
<integer>5</integer> <integer>5</integer>
<key>WindowOrderList</key> <key>WindowOrderList</key>
<array> <array>
<string>EC6AC99B10EECA9D008C3507</string>
<string>EC6AC99C10EECA9D008C3507</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>1C78EAAD065D492600B07095</string>
<string>EC6C55E710EDE640000E1B18</string>
<string>/Users/diopmamadou/Documents/doubango/xcode/tinySAK/tinySAK.xcodeproj</string> <string>/Users/diopmamadou/Documents/doubango/xcode/tinySAK/tinySAK.xcodeproj</string>
</array> </array>
<key>WindowString</key> <key>WindowString</key>
<string>434 256 1409 922 0 0 1920 1178 </string> <string>166 234 1409 922 0 0 1920 1178 </string>
<key>WindowToolsV3</key> <key>WindowToolsV3</key>
<array> <array>
<dict> <dict>
@ -898,14 +663,12 @@
<key>Dock</key> <key>Dock</key>
<array> <array>
<dict> <dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key> <key>ContentConfiguration</key>
<dict> <dict>
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>1CD0528F0623707200166675</string> <string>1CD0528F0623707200166675</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>tsk_debug.h</string> <string></string>
<key>StatusBarVisibility</key> <key>StatusBarVisibility</key>
<true/> <true/>
</dict> </dict>
@ -961,7 +724,7 @@
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>EC6C55E710EDE640000E1B18</string> <string>EC6C55E710EDE640000E1B18</string>
<string>EC6AC97E10EEC94C008C3507</string> <string>ECD2C9D010F1481800F2B7B3</string>
<string>1CD0528F0623707200166675</string> <string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string> <string>XCMainBuildResultsModuleGUID</string>
</array> </array>
@ -972,7 +735,7 @@
<key>WindowToolGUID</key> <key>WindowToolGUID</key>
<string>EC6C55E710EDE640000E1B18</string> <string>EC6C55E710EDE640000E1B18</string>
<key>WindowToolIsVisible</key> <key>WindowToolIsVisible</key>
<true/> <false/>
</dict> </dict>
<dict> <dict>
<key>FirstTimeWindowDisplayed</key> <key>FirstTimeWindowDisplayed</key>
@ -1003,8 +766,8 @@
<string>yes</string> <string>yes</string>
<key>sizes</key> <key>sizes</key>
<array> <array>
<string>{{0, 0}, {316, 202}}</string> <string>{{0, 0}, {316, 203}}</string>
<string>{{316, 0}, {378, 202}}</string> <string>{{316, 0}, {378, 203}}</string>
</array> </array>
</dict> </dict>
<key>VerticalSplitView</key> <key>VerticalSplitView</key>
@ -1019,8 +782,8 @@
<string>yes</string> <string>yes</string>
<key>sizes</key> <key>sizes</key>
<array> <array>
<string>{{0, 0}, {694, 202}}</string> <string>{{0, 0}, {694, 203}}</string>
<string>{{0, 202}, {694, 179}}</string> <string>{{0, 203}, {694, 178}}</string>
</array> </array>
</dict> </dict>
</dict> </dict>
@ -1053,7 +816,7 @@
<real>102</real> <real>102</real>
</array> </array>
<key>Frame</key> <key>Frame</key>
<string>{{316, 0}, {378, 202}}</string> <string>{{316, 0}, {378, 203}}</string>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>773 347 694 422 0 0 1920 1178 </string> <string>773 347 694 422 0 0 1920 1178 </string>
</dict> </dict>
@ -1081,13 +844,13 @@
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>1CD10A99069EF8BA00B06720</string> <string>1CD10A99069EF8BA00B06720</string>
<string>EC6AC95710EEC5E9008C3507</string> <string>ECD2C9D110F1481800F2B7B3</string>
<string>1C162984064C10D400B95A72</string> <string>1C162984064C10D400B95A72</string>
<string>EC6AC95810EEC5E9008C3507</string> <string>ECD2C9D210F1481800F2B7B3</string>
<string>EC6AC95910EEC5E9008C3507</string> <string>ECD2C9D310F1481800F2B7B3</string>
<string>EC6AC95A10EEC5E9008C3507</string> <string>ECD2C9D410F1481800F2B7B3</string>
<string>EC6AC95B10EEC5E9008C3507</string> <string>ECD2C9D510F1481800F2B7B3</string>
<string>EC6AC95C10EEC5E9008C3507</string> <string>ECD2C9D610F1481800F2B7B3</string>
</array> </array>
<key>ToolbarConfiguration</key> <key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string> <string>xcode.toolbar.config.debugV3</string>
@ -1251,7 +1014,7 @@
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>1C78EAAD065D492600B07095</string> <string>1C78EAAD065D492600B07095</string>
<string>EC6AC97F10EEC94C008C3507</string> <string>ECD2C9D710F1481800F2B7B3</string>
<string>1C78EAAC065D492600B07095</string> <string>1C78EAAC065D492600B07095</string>
</array> </array>
<key>ToolbarConfiguration</key> <key>ToolbarConfiguration</key>
@ -1261,7 +1024,7 @@
<key>WindowToolGUID</key> <key>WindowToolGUID</key>
<string>1C78EAAD065D492600B07095</string> <string>1C78EAAD065D492600B07095</string>
<key>WindowToolIsVisible</key> <key>WindowToolIsVisible</key>
<true/> <false/>
</dict> </dict>
<dict> <dict>
<key>Identifier</key> <key>Identifier</key>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,905 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
ECED62BC10F98C67006B4DC9 /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED627B10F98C67006B4DC9 /* adler32.c */; };
ECED62BD10F98C67006B4DC9 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED627C10F98C67006B4DC9 /* compress.c */; };
ECED62BE10F98C67006B4DC9 /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED627D10F98C67006B4DC9 /* deflate.c */; };
ECED62BF10F98C67006B4DC9 /* deflate.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED627E10F98C67006B4DC9 /* deflate.h */; };
ECED62C010F98C67006B4DC9 /* tcomp.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED627F10F98C67006B4DC9 /* tcomp.c */; };
ECED62C110F98C67006B4DC9 /* tcomp.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628010F98C67006B4DC9 /* tcomp.h */; };
ECED62C210F98C67006B4DC9 /* tcomp_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED628110F98C67006B4DC9 /* tcomp_buffer.c */; };
ECED62C310F98C67006B4DC9 /* tcomp_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628210F98C67006B4DC9 /* tcomp_buffer.h */; };
ECED62C410F98C67006B4DC9 /* tcomp_compartment.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED628310F98C67006B4DC9 /* tcomp_compartment.c */; };
ECED62C510F98C67006B4DC9 /* tcomp_compartment.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628410F98C67006B4DC9 /* tcomp_compartment.h */; };
ECED62C610F98C67006B4DC9 /* tcomp_compressor.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628510F98C67006B4DC9 /* tcomp_compressor.h */; };
ECED62C710F98C67006B4DC9 /* tcomp_compressor_deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED628610F98C67006B4DC9 /* tcomp_compressor_deflate.c */; };
ECED62C810F98C67006B4DC9 /* tcomp_compressor_deflate.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628710F98C67006B4DC9 /* tcomp_compressor_deflate.h */; };
ECED62C910F98C67006B4DC9 /* tcomp_compressor_dummy.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED628810F98C67006B4DC9 /* tcomp_compressor_dummy.c */; };
ECED62CA10F98C67006B4DC9 /* tcomp_compressor_dummy.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628910F98C67006B4DC9 /* tcomp_compressor_dummy.h */; };
ECED62CB10F98C67006B4DC9 /* tcomp_compressordata.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED628A10F98C67006B4DC9 /* tcomp_compressordata.c */; };
ECED62CC10F98C67006B4DC9 /* tcomp_compressordata.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628B10F98C67006B4DC9 /* tcomp_compressordata.h */; };
ECED62CD10F98C67006B4DC9 /* tcomp_compressordisp.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED628C10F98C67006B4DC9 /* tcomp_compressordisp.c */; };
ECED62CE10F98C67006B4DC9 /* tcomp_compressordisp.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628D10F98C67006B4DC9 /* tcomp_compressordisp.h */; };
ECED62CF10F98C67006B4DC9 /* tcomp_decompressordisp.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED628E10F98C67006B4DC9 /* tcomp_decompressordisp.c */; };
ECED62D010F98C67006B4DC9 /* tcomp_decompressordisp.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED628F10F98C67006B4DC9 /* tcomp_decompressordisp.h */; };
ECED62D110F98C67006B4DC9 /* tcomp_deflatedata.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED629010F98C67006B4DC9 /* tcomp_deflatedata.c */; };
ECED62D210F98C67006B4DC9 /* tcomp_deflatedata.ghost.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED629110F98C67006B4DC9 /* tcomp_deflatedata.ghost.c */; };
ECED62D310F98C67006B4DC9 /* tcomp_deflatedata.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629210F98C67006B4DC9 /* tcomp_deflatedata.h */; };
ECED62D410F98C67006B4DC9 /* tcomp_deflatedata.zlib.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED629310F98C67006B4DC9 /* tcomp_deflatedata.zlib.c */; };
ECED62D510F98C67006B4DC9 /* tcomp_dicts.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED629410F98C67006B4DC9 /* tcomp_dicts.c */; };
ECED62D610F98C67006B4DC9 /* tcomp_dicts.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629510F98C67006B4DC9 /* tcomp_dicts.h */; };
ECED62D710F98C67006B4DC9 /* tcomp_headers_index.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629610F98C67006B4DC9 /* tcomp_headers_index.h */; };
ECED62D810F98C67006B4DC9 /* tcomp_instructions.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629710F98C67006B4DC9 /* tcomp_instructions.h */; };
ECED62D910F98C67006B4DC9 /* tcomp_manager.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED629810F98C67006B4DC9 /* tcomp_manager.c */; };
ECED62DA10F98C67006B4DC9 /* tcomp_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629910F98C67006B4DC9 /* tcomp_manager.h */; };
ECED62DB10F98C67006B4DC9 /* tcomp_message.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED629A10F98C67006B4DC9 /* tcomp_message.c */; };
ECED62DC10F98C67006B4DC9 /* tcomp_message.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629B10F98C67006B4DC9 /* tcomp_message.h */; };
ECED62DD10F98C67006B4DC9 /* tcomp_nack_codes.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629C10F98C67006B4DC9 /* tcomp_nack_codes.h */; };
ECED62DE10F98C67006B4DC9 /* tcomp_nackinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED629D10F98C67006B4DC9 /* tcomp_nackinfo.c */; };
ECED62DF10F98C67006B4DC9 /* tcomp_nackinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629E10F98C67006B4DC9 /* tcomp_nackinfo.h */; };
ECED62E010F98C67006B4DC9 /* tcomp_operands.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED629F10F98C67006B4DC9 /* tcomp_operands.h */; };
ECED62E110F98C67006B4DC9 /* tcomp_params.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62A010F98C67006B4DC9 /* tcomp_params.c */; };
ECED62E210F98C67006B4DC9 /* tcomp_params.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62A110F98C67006B4DC9 /* tcomp_params.h */; };
ECED62E310F98C67006B4DC9 /* tcomp_reqfeed.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62A210F98C67006B4DC9 /* tcomp_reqfeed.c */; };
ECED62E410F98C67006B4DC9 /* tcomp_reqfeed.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62A310F98C67006B4DC9 /* tcomp_reqfeed.h */; };
ECED62E510F98C67006B4DC9 /* tcomp_result.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62A410F98C67006B4DC9 /* tcomp_result.c */; };
ECED62E610F98C67006B4DC9 /* tcomp_result.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62A510F98C67006B4DC9 /* tcomp_result.h */; };
ECED62E710F98C67006B4DC9 /* tcomp_rfc3485_dictionary_sip.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62A610F98C67006B4DC9 /* tcomp_rfc3485_dictionary_sip.h */; };
ECED62E810F98C67006B4DC9 /* tcomp_rfc5049_sip.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62A710F98C67006B4DC9 /* tcomp_rfc5049_sip.h */; };
ECED62E910F98C67006B4DC9 /* tcomp_rfc5112_dictionary_presence.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62A810F98C67006B4DC9 /* tcomp_rfc5112_dictionary_presence.h */; };
ECED62EA10F98C67006B4DC9 /* tcomp_state.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62A910F98C67006B4DC9 /* tcomp_state.c */; };
ECED62EB10F98C67006B4DC9 /* tcomp_state.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62AA10F98C67006B4DC9 /* tcomp_state.h */; };
ECED62EC10F98C67006B4DC9 /* tcomp_statehandler.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62AB10F98C67006B4DC9 /* tcomp_statehandler.c */; };
ECED62ED10F98C67006B4DC9 /* tcomp_statehandler.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62AC10F98C67006B4DC9 /* tcomp_statehandler.h */; };
ECED62EE10F98C67006B4DC9 /* tcomp_types.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62AD10F98C67006B4DC9 /* tcomp_types.h */; };
ECED62EF10F98C67006B4DC9 /* tcomp_udvm.bytecopy.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62AE10F98C67006B4DC9 /* tcomp_udvm.bytecopy.c */; };
ECED62F010F98C67006B4DC9 /* tcomp_udvm.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62AF10F98C67006B4DC9 /* tcomp_udvm.c */; };
ECED62F110F98C67006B4DC9 /* tcomp_udvm.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62B010F98C67006B4DC9 /* tcomp_udvm.h */; };
ECED62F210F98C67006B4DC9 /* tcomp_udvm.instructions.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62B110F98C67006B4DC9 /* tcomp_udvm.instructions.c */; };
ECED62F310F98C67006B4DC9 /* tcomp_udvm.nack.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62B210F98C67006B4DC9 /* tcomp_udvm.nack.c */; };
ECED62F410F98C67006B4DC9 /* tcomp_udvm.operands.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62B310F98C67006B4DC9 /* tcomp_udvm.operands.c */; };
ECED62F510F98C67006B4DC9 /* tcomp_udvm.statemanagment.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62B410F98C67006B4DC9 /* tcomp_udvm.statemanagment.c */; };
ECED62F610F98C67006B4DC9 /* tinysigcomp_config.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62B510F98C67006B4DC9 /* tinysigcomp_config.h */; };
ECED62F710F98C67006B4DC9 /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62B610F98C67006B4DC9 /* trees.c */; };
ECED62F810F98C67006B4DC9 /* trees.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62B710F98C67006B4DC9 /* trees.h */; };
ECED62F910F98C67006B4DC9 /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62B810F98C67006B4DC9 /* zconf.h */; };
ECED62FA10F98C67006B4DC9 /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62B910F98C67006B4DC9 /* zlib.h */; };
ECED62FB10F98C67006B4DC9 /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED62BA10F98C67006B4DC9 /* zutil.c */; };
ECED62FC10F98C67006B4DC9 /* zutil.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED62BB10F98C67006B4DC9 /* zutil.h */; };
ECED633F10F98DC5006B4DC9 /* tinySAK_config.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED630A10F98DC5006B4DC9 /* tinySAK_config.h */; };
ECED634010F98DC5006B4DC9 /* tsk.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED630B10F98DC5006B4DC9 /* tsk.c */; };
ECED634110F98DC5006B4DC9 /* tsk.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED630C10F98DC5006B4DC9 /* tsk.h */; };
ECED634210F98DC5006B4DC9 /* tsk_base64.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED630D10F98DC5006B4DC9 /* tsk_base64.c */; };
ECED634310F98DC5006B4DC9 /* tsk_base64.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED630E10F98DC5006B4DC9 /* tsk_base64.h */; };
ECED634410F98DC5006B4DC9 /* tsk_binaryutils.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED630F10F98DC5006B4DC9 /* tsk_binaryutils.c */; };
ECED634510F98DC5006B4DC9 /* tsk_binaryutils.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631010F98DC5006B4DC9 /* tsk_binaryutils.h */; };
ECED634610F98DC5006B4DC9 /* tsk_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED631110F98DC5006B4DC9 /* tsk_buffer.c */; };
ECED634710F98DC5006B4DC9 /* tsk_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631210F98DC5006B4DC9 /* tsk_buffer.h */; };
ECED634810F98DC5006B4DC9 /* tsk_condwait.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED631310F98DC5006B4DC9 /* tsk_condwait.c */; };
ECED634910F98DC5006B4DC9 /* tsk_condwait.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631410F98DC5006B4DC9 /* tsk_condwait.h */; };
ECED634A10F98DC5006B4DC9 /* tsk_debug.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED631510F98DC5006B4DC9 /* tsk_debug.c */; };
ECED634B10F98DC5006B4DC9 /* tsk_debug.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631610F98DC5006B4DC9 /* tsk_debug.h */; };
ECED634C10F98DC5006B4DC9 /* tsk_errno.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631710F98DC5006B4DC9 /* tsk_errno.h */; };
ECED634D10F98DC5006B4DC9 /* tsk_heap.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED631810F98DC5006B4DC9 /* tsk_heap.c */; };
ECED634E10F98DC5006B4DC9 /* tsk_heap.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631910F98DC5006B4DC9 /* tsk_heap.h */; };
ECED634F10F98DC5006B4DC9 /* tsk_hmac.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED631A10F98DC5006B4DC9 /* tsk_hmac.c */; };
ECED635010F98DC5006B4DC9 /* tsk_hmac.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631B10F98DC5006B4DC9 /* tsk_hmac.h */; };
ECED635110F98DC5006B4DC9 /* tsk_list.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED631C10F98DC5006B4DC9 /* tsk_list.c */; };
ECED635210F98DC5006B4DC9 /* tsk_list.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631D10F98DC5006B4DC9 /* tsk_list.h */; };
ECED635310F98DC5006B4DC9 /* tsk_macros.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED631E10F98DC5006B4DC9 /* tsk_macros.h */; };
ECED635410F98DC5006B4DC9 /* tsk_md5.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED631F10F98DC5006B4DC9 /* tsk_md5.c */; };
ECED635510F98DC5006B4DC9 /* tsk_md5.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632010F98DC5006B4DC9 /* tsk_md5.h */; };
ECED635610F98DC5006B4DC9 /* tsk_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632110F98DC5006B4DC9 /* tsk_memory.c */; };
ECED635710F98DC5006B4DC9 /* tsk_memory.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632210F98DC5006B4DC9 /* tsk_memory.h */; };
ECED635810F98DC5006B4DC9 /* tsk_mutex.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632310F98DC5006B4DC9 /* tsk_mutex.c */; };
ECED635910F98DC5006B4DC9 /* tsk_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632410F98DC5006B4DC9 /* tsk_mutex.h */; };
ECED635A10F98DC5006B4DC9 /* tsk_object.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632510F98DC5006B4DC9 /* tsk_object.c */; };
ECED635B10F98DC5006B4DC9 /* tsk_object.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632610F98DC5006B4DC9 /* tsk_object.h */; };
ECED635C10F98DC5006B4DC9 /* tsk_params.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632710F98DC5006B4DC9 /* tsk_params.c */; };
ECED635D10F98DC5006B4DC9 /* tsk_params.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632810F98DC5006B4DC9 /* tsk_params.h */; };
ECED635E10F98DC5006B4DC9 /* tsk_ppfcs16.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632910F98DC5006B4DC9 /* tsk_ppfcs16.c */; };
ECED635F10F98DC5006B4DC9 /* tsk_ppfcs16.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632A10F98DC5006B4DC9 /* tsk_ppfcs16.h */; };
ECED636010F98DC5006B4DC9 /* tsk_runnable.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632B10F98DC5006B4DC9 /* tsk_runnable.c */; };
ECED636110F98DC5006B4DC9 /* tsk_runnable.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632C10F98DC5006B4DC9 /* tsk_runnable.h */; };
ECED636210F98DC5006B4DC9 /* tsk_safeobj.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632D10F98DC5006B4DC9 /* tsk_safeobj.c */; };
ECED636310F98DC5006B4DC9 /* tsk_safeobj.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED632E10F98DC5006B4DC9 /* tsk_safeobj.h */; };
ECED636410F98DC5006B4DC9 /* tsk_semaphore.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED632F10F98DC5006B4DC9 /* tsk_semaphore.c */; };
ECED636510F98DC5006B4DC9 /* tsk_semaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633010F98DC5006B4DC9 /* tsk_semaphore.h */; };
ECED636610F98DC5006B4DC9 /* tsk_sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED633110F98DC5006B4DC9 /* tsk_sha1.c */; };
ECED636710F98DC5006B4DC9 /* tsk_sha1.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633210F98DC5006B4DC9 /* tsk_sha1.h */; };
ECED636810F98DC5006B4DC9 /* tsk_string.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED633310F98DC5006B4DC9 /* tsk_string.c */; };
ECED636910F98DC5006B4DC9 /* tsk_string.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633410F98DC5006B4DC9 /* tsk_string.h */; };
ECED636A10F98DC5006B4DC9 /* tsk_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED633510F98DC5006B4DC9 /* tsk_thread.c */; };
ECED636B10F98DC5006B4DC9 /* tsk_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633610F98DC5006B4DC9 /* tsk_thread.h */; };
ECED636C10F98DC5006B4DC9 /* tsk_time.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED633710F98DC5006B4DC9 /* tsk_time.c */; };
ECED636D10F98DC5006B4DC9 /* tsk_time.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633810F98DC5006B4DC9 /* tsk_time.h */; };
ECED636E10F98DC5006B4DC9 /* tsk_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED633910F98DC5006B4DC9 /* tsk_timer.c */; };
ECED636F10F98DC5006B4DC9 /* tsk_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633A10F98DC5006B4DC9 /* tsk_timer.h */; };
ECED637010F98DC5006B4DC9 /* tsk_url.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED633B10F98DC5006B4DC9 /* tsk_url.c */; };
ECED637110F98DC5006B4DC9 /* tsk_url.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633C10F98DC5006B4DC9 /* tsk_url.h */; };
ECED637210F98DC5006B4DC9 /* tsk_xml.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED633D10F98DC5006B4DC9 /* tsk_xml.c */; };
ECED637310F98DC5006B4DC9 /* tsk_xml.h in Headers */ = {isa = PBXBuildFile; fileRef = ECED633E10F98DC5006B4DC9 /* tsk_xml.h */; };
ECED637710F98DEC006B4DC9 /* libtinySAK.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = ECED630510F98D55006B4DC9 /* libtinySAK.dylib */; };
ECED639110F99173006B4DC9 /* libtinySAK.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = ECED630510F98D55006B4DC9 /* libtinySAK.dylib */; };
ECED639210F99173006B4DC9 /* libtinySIGCOMP.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC0630554660B00DB518D /* libtinySIGCOMP.dylib */; };
ECED639810F9918E006B4DC9 /* stdafx.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED639410F9918E006B4DC9 /* stdafx.c */; };
ECED639910F9918E006B4DC9 /* test.c in Sources */ = {isa = PBXBuildFile; fileRef = ECED639710F9918E006B4DC9 /* test.c */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
ECED637510F98DE8006B4DC9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = ECED630410F98D55006B4DC9 /* tinySAK */;
remoteInfo = tinySAK;
};
ECED638D10F9916E006B4DC9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = D2AAC0620554660B00DB518D /* tinySIGCOMP */;
remoteInfo = tinySIGCOMP;
};
ECED638F10F9916E006B4DC9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = ECED630410F98D55006B4DC9 /* tinySAK */;
remoteInfo = tinySAK;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
D2AAC0630554660B00DB518D /* libtinySIGCOMP.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libtinySIGCOMP.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
ECED627610F98C41006B4DC9 /* asm */ = {isa = PBXFileReference; lastKnownFileType = folder; name = asm; path = ../../tinySIGCOMP/asm; sourceTree = SOURCE_ROOT; };
ECED627B10F98C67006B4DC9 /* adler32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = ../../tinySIGCOMP/src/adler32.c; sourceTree = SOURCE_ROOT; };
ECED627C10F98C67006B4DC9 /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = compress.c; path = ../../tinySIGCOMP/src/compress.c; sourceTree = SOURCE_ROOT; };
ECED627D10F98C67006B4DC9 /* deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = ../../tinySIGCOMP/src/deflate.c; sourceTree = SOURCE_ROOT; };
ECED627E10F98C67006B4DC9 /* deflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = deflate.h; path = ../../tinySIGCOMP/src/deflate.h; sourceTree = SOURCE_ROOT; };
ECED627F10F98C67006B4DC9 /* tcomp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp.c; path = ../../tinySIGCOMP/src/tcomp.c; sourceTree = SOURCE_ROOT; };
ECED628010F98C67006B4DC9 /* tcomp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp.h; path = ../../tinySIGCOMP/src/tcomp.h; sourceTree = SOURCE_ROOT; };
ECED628110F98C67006B4DC9 /* tcomp_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_buffer.c; path = ../../tinySIGCOMP/src/tcomp_buffer.c; sourceTree = SOURCE_ROOT; };
ECED628210F98C67006B4DC9 /* tcomp_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_buffer.h; path = ../../tinySIGCOMP/src/tcomp_buffer.h; sourceTree = SOURCE_ROOT; };
ECED628310F98C67006B4DC9 /* tcomp_compartment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_compartment.c; path = ../../tinySIGCOMP/src/tcomp_compartment.c; sourceTree = SOURCE_ROOT; };
ECED628410F98C67006B4DC9 /* tcomp_compartment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_compartment.h; path = ../../tinySIGCOMP/src/tcomp_compartment.h; sourceTree = SOURCE_ROOT; };
ECED628510F98C67006B4DC9 /* tcomp_compressor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_compressor.h; path = ../../tinySIGCOMP/src/tcomp_compressor.h; sourceTree = SOURCE_ROOT; };
ECED628610F98C67006B4DC9 /* tcomp_compressor_deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_compressor_deflate.c; path = ../../tinySIGCOMP/src/tcomp_compressor_deflate.c; sourceTree = SOURCE_ROOT; };
ECED628710F98C67006B4DC9 /* tcomp_compressor_deflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_compressor_deflate.h; path = ../../tinySIGCOMP/src/tcomp_compressor_deflate.h; sourceTree = SOURCE_ROOT; };
ECED628810F98C67006B4DC9 /* tcomp_compressor_dummy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_compressor_dummy.c; path = ../../tinySIGCOMP/src/tcomp_compressor_dummy.c; sourceTree = SOURCE_ROOT; };
ECED628910F98C67006B4DC9 /* tcomp_compressor_dummy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_compressor_dummy.h; path = ../../tinySIGCOMP/src/tcomp_compressor_dummy.h; sourceTree = SOURCE_ROOT; };
ECED628A10F98C67006B4DC9 /* tcomp_compressordata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_compressordata.c; path = ../../tinySIGCOMP/src/tcomp_compressordata.c; sourceTree = SOURCE_ROOT; };
ECED628B10F98C67006B4DC9 /* tcomp_compressordata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_compressordata.h; path = ../../tinySIGCOMP/src/tcomp_compressordata.h; sourceTree = SOURCE_ROOT; };
ECED628C10F98C67006B4DC9 /* tcomp_compressordisp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_compressordisp.c; path = ../../tinySIGCOMP/src/tcomp_compressordisp.c; sourceTree = SOURCE_ROOT; };
ECED628D10F98C67006B4DC9 /* tcomp_compressordisp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_compressordisp.h; path = ../../tinySIGCOMP/src/tcomp_compressordisp.h; sourceTree = SOURCE_ROOT; };
ECED628E10F98C67006B4DC9 /* tcomp_decompressordisp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_decompressordisp.c; path = ../../tinySIGCOMP/src/tcomp_decompressordisp.c; sourceTree = SOURCE_ROOT; };
ECED628F10F98C67006B4DC9 /* tcomp_decompressordisp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_decompressordisp.h; path = ../../tinySIGCOMP/src/tcomp_decompressordisp.h; sourceTree = SOURCE_ROOT; };
ECED629010F98C67006B4DC9 /* tcomp_deflatedata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_deflatedata.c; path = ../../tinySIGCOMP/src/tcomp_deflatedata.c; sourceTree = SOURCE_ROOT; };
ECED629110F98C67006B4DC9 /* tcomp_deflatedata.ghost.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_deflatedata.ghost.c; path = ../../tinySIGCOMP/src/tcomp_deflatedata.ghost.c; sourceTree = SOURCE_ROOT; };
ECED629210F98C67006B4DC9 /* tcomp_deflatedata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_deflatedata.h; path = ../../tinySIGCOMP/src/tcomp_deflatedata.h; sourceTree = SOURCE_ROOT; };
ECED629310F98C67006B4DC9 /* tcomp_deflatedata.zlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_deflatedata.zlib.c; path = ../../tinySIGCOMP/src/tcomp_deflatedata.zlib.c; sourceTree = SOURCE_ROOT; };
ECED629410F98C67006B4DC9 /* tcomp_dicts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_dicts.c; path = ../../tinySIGCOMP/src/tcomp_dicts.c; sourceTree = SOURCE_ROOT; };
ECED629510F98C67006B4DC9 /* tcomp_dicts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_dicts.h; path = ../../tinySIGCOMP/src/tcomp_dicts.h; sourceTree = SOURCE_ROOT; };
ECED629610F98C67006B4DC9 /* tcomp_headers_index.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_headers_index.h; path = ../../tinySIGCOMP/src/tcomp_headers_index.h; sourceTree = SOURCE_ROOT; };
ECED629710F98C67006B4DC9 /* tcomp_instructions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_instructions.h; path = ../../tinySIGCOMP/src/tcomp_instructions.h; sourceTree = SOURCE_ROOT; };
ECED629810F98C67006B4DC9 /* tcomp_manager.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_manager.c; path = ../../tinySIGCOMP/src/tcomp_manager.c; sourceTree = SOURCE_ROOT; };
ECED629910F98C67006B4DC9 /* tcomp_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_manager.h; path = ../../tinySIGCOMP/src/tcomp_manager.h; sourceTree = SOURCE_ROOT; };
ECED629A10F98C67006B4DC9 /* tcomp_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_message.c; path = ../../tinySIGCOMP/src/tcomp_message.c; sourceTree = SOURCE_ROOT; };
ECED629B10F98C67006B4DC9 /* tcomp_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_message.h; path = ../../tinySIGCOMP/src/tcomp_message.h; sourceTree = SOURCE_ROOT; };
ECED629C10F98C67006B4DC9 /* tcomp_nack_codes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_nack_codes.h; path = ../../tinySIGCOMP/src/tcomp_nack_codes.h; sourceTree = SOURCE_ROOT; };
ECED629D10F98C67006B4DC9 /* tcomp_nackinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_nackinfo.c; path = ../../tinySIGCOMP/src/tcomp_nackinfo.c; sourceTree = SOURCE_ROOT; };
ECED629E10F98C67006B4DC9 /* tcomp_nackinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_nackinfo.h; path = ../../tinySIGCOMP/src/tcomp_nackinfo.h; sourceTree = SOURCE_ROOT; };
ECED629F10F98C67006B4DC9 /* tcomp_operands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_operands.h; path = ../../tinySIGCOMP/src/tcomp_operands.h; sourceTree = SOURCE_ROOT; };
ECED62A010F98C67006B4DC9 /* tcomp_params.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_params.c; path = ../../tinySIGCOMP/src/tcomp_params.c; sourceTree = SOURCE_ROOT; };
ECED62A110F98C67006B4DC9 /* tcomp_params.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_params.h; path = ../../tinySIGCOMP/src/tcomp_params.h; sourceTree = SOURCE_ROOT; };
ECED62A210F98C67006B4DC9 /* tcomp_reqfeed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_reqfeed.c; path = ../../tinySIGCOMP/src/tcomp_reqfeed.c; sourceTree = SOURCE_ROOT; };
ECED62A310F98C67006B4DC9 /* tcomp_reqfeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_reqfeed.h; path = ../../tinySIGCOMP/src/tcomp_reqfeed.h; sourceTree = SOURCE_ROOT; };
ECED62A410F98C67006B4DC9 /* tcomp_result.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_result.c; path = ../../tinySIGCOMP/src/tcomp_result.c; sourceTree = SOURCE_ROOT; };
ECED62A510F98C67006B4DC9 /* tcomp_result.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_result.h; path = ../../tinySIGCOMP/src/tcomp_result.h; sourceTree = SOURCE_ROOT; };
ECED62A610F98C67006B4DC9 /* tcomp_rfc3485_dictionary_sip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_rfc3485_dictionary_sip.h; path = ../../tinySIGCOMP/src/tcomp_rfc3485_dictionary_sip.h; sourceTree = SOURCE_ROOT; };
ECED62A710F98C67006B4DC9 /* tcomp_rfc5049_sip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_rfc5049_sip.h; path = ../../tinySIGCOMP/src/tcomp_rfc5049_sip.h; sourceTree = SOURCE_ROOT; };
ECED62A810F98C67006B4DC9 /* tcomp_rfc5112_dictionary_presence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_rfc5112_dictionary_presence.h; path = ../../tinySIGCOMP/src/tcomp_rfc5112_dictionary_presence.h; sourceTree = SOURCE_ROOT; };
ECED62A910F98C67006B4DC9 /* tcomp_state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_state.c; path = ../../tinySIGCOMP/src/tcomp_state.c; sourceTree = SOURCE_ROOT; };
ECED62AA10F98C67006B4DC9 /* tcomp_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_state.h; path = ../../tinySIGCOMP/src/tcomp_state.h; sourceTree = SOURCE_ROOT; };
ECED62AB10F98C67006B4DC9 /* tcomp_statehandler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_statehandler.c; path = ../../tinySIGCOMP/src/tcomp_statehandler.c; sourceTree = SOURCE_ROOT; };
ECED62AC10F98C67006B4DC9 /* tcomp_statehandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_statehandler.h; path = ../../tinySIGCOMP/src/tcomp_statehandler.h; sourceTree = SOURCE_ROOT; };
ECED62AD10F98C67006B4DC9 /* tcomp_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_types.h; path = ../../tinySIGCOMP/src/tcomp_types.h; sourceTree = SOURCE_ROOT; };
ECED62AE10F98C67006B4DC9 /* tcomp_udvm.bytecopy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_udvm.bytecopy.c; path = ../../tinySIGCOMP/src/tcomp_udvm.bytecopy.c; sourceTree = SOURCE_ROOT; };
ECED62AF10F98C67006B4DC9 /* tcomp_udvm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_udvm.c; path = ../../tinySIGCOMP/src/tcomp_udvm.c; sourceTree = SOURCE_ROOT; };
ECED62B010F98C67006B4DC9 /* tcomp_udvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcomp_udvm.h; path = ../../tinySIGCOMP/src/tcomp_udvm.h; sourceTree = SOURCE_ROOT; };
ECED62B110F98C67006B4DC9 /* tcomp_udvm.instructions.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_udvm.instructions.c; path = ../../tinySIGCOMP/src/tcomp_udvm.instructions.c; sourceTree = SOURCE_ROOT; };
ECED62B210F98C67006B4DC9 /* tcomp_udvm.nack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_udvm.nack.c; path = ../../tinySIGCOMP/src/tcomp_udvm.nack.c; sourceTree = SOURCE_ROOT; };
ECED62B310F98C67006B4DC9 /* tcomp_udvm.operands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_udvm.operands.c; path = ../../tinySIGCOMP/src/tcomp_udvm.operands.c; sourceTree = SOURCE_ROOT; };
ECED62B410F98C67006B4DC9 /* tcomp_udvm.statemanagment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcomp_udvm.statemanagment.c; path = ../../tinySIGCOMP/src/tcomp_udvm.statemanagment.c; sourceTree = SOURCE_ROOT; };
ECED62B510F98C67006B4DC9 /* tinysigcomp_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinysigcomp_config.h; path = ../../tinySIGCOMP/src/tinysigcomp_config.h; sourceTree = SOURCE_ROOT; };
ECED62B610F98C67006B4DC9 /* trees.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trees.c; path = ../../tinySIGCOMP/src/trees.c; sourceTree = SOURCE_ROOT; };
ECED62B710F98C67006B4DC9 /* trees.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trees.h; path = ../../tinySIGCOMP/src/trees.h; sourceTree = SOURCE_ROOT; };
ECED62B810F98C67006B4DC9 /* zconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zconf.h; path = ../../tinySIGCOMP/src/zconf.h; sourceTree = SOURCE_ROOT; };
ECED62B910F98C67006B4DC9 /* zlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = ../../tinySIGCOMP/src/zlib.h; sourceTree = SOURCE_ROOT; };
ECED62BA10F98C67006B4DC9 /* zutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zutil.c; path = ../../tinySIGCOMP/src/zutil.c; sourceTree = SOURCE_ROOT; };
ECED62BB10F98C67006B4DC9 /* zutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zutil.h; path = ../../tinySIGCOMP/src/zutil.h; sourceTree = SOURCE_ROOT; };
ECED630510F98D55006B4DC9 /* libtinySAK.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libtinySAK.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
ECED630A10F98DC5006B4DC9 /* tinySAK_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinySAK_config.h; path = ../../tinySAK/src/tinySAK_config.h; sourceTree = SOURCE_ROOT; };
ECED630B10F98DC5006B4DC9 /* tsk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk.c; path = ../../tinySAK/src/tsk.c; sourceTree = SOURCE_ROOT; };
ECED630C10F98DC5006B4DC9 /* tsk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk.h; path = ../../tinySAK/src/tsk.h; sourceTree = SOURCE_ROOT; };
ECED630D10F98DC5006B4DC9 /* tsk_base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_base64.c; path = ../../tinySAK/src/tsk_base64.c; sourceTree = SOURCE_ROOT; };
ECED630E10F98DC5006B4DC9 /* tsk_base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_base64.h; path = ../../tinySAK/src/tsk_base64.h; sourceTree = SOURCE_ROOT; };
ECED630F10F98DC5006B4DC9 /* tsk_binaryutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_binaryutils.c; path = ../../tinySAK/src/tsk_binaryutils.c; sourceTree = SOURCE_ROOT; };
ECED631010F98DC5006B4DC9 /* tsk_binaryutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_binaryutils.h; path = ../../tinySAK/src/tsk_binaryutils.h; sourceTree = SOURCE_ROOT; };
ECED631110F98DC5006B4DC9 /* tsk_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_buffer.c; path = ../../tinySAK/src/tsk_buffer.c; sourceTree = SOURCE_ROOT; };
ECED631210F98DC5006B4DC9 /* tsk_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_buffer.h; path = ../../tinySAK/src/tsk_buffer.h; sourceTree = SOURCE_ROOT; };
ECED631310F98DC5006B4DC9 /* tsk_condwait.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_condwait.c; path = ../../tinySAK/src/tsk_condwait.c; sourceTree = SOURCE_ROOT; };
ECED631410F98DC5006B4DC9 /* tsk_condwait.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_condwait.h; path = ../../tinySAK/src/tsk_condwait.h; sourceTree = SOURCE_ROOT; };
ECED631510F98DC5006B4DC9 /* tsk_debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_debug.c; path = ../../tinySAK/src/tsk_debug.c; sourceTree = SOURCE_ROOT; };
ECED631610F98DC5006B4DC9 /* tsk_debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_debug.h; path = ../../tinySAK/src/tsk_debug.h; sourceTree = SOURCE_ROOT; };
ECED631710F98DC5006B4DC9 /* tsk_errno.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_errno.h; path = ../../tinySAK/src/tsk_errno.h; sourceTree = SOURCE_ROOT; };
ECED631810F98DC5006B4DC9 /* tsk_heap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_heap.c; path = ../../tinySAK/src/tsk_heap.c; sourceTree = SOURCE_ROOT; };
ECED631910F98DC5006B4DC9 /* tsk_heap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_heap.h; path = ../../tinySAK/src/tsk_heap.h; sourceTree = SOURCE_ROOT; };
ECED631A10F98DC5006B4DC9 /* tsk_hmac.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_hmac.c; path = ../../tinySAK/src/tsk_hmac.c; sourceTree = SOURCE_ROOT; };
ECED631B10F98DC5006B4DC9 /* tsk_hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_hmac.h; path = ../../tinySAK/src/tsk_hmac.h; sourceTree = SOURCE_ROOT; };
ECED631C10F98DC5006B4DC9 /* tsk_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_list.c; path = ../../tinySAK/src/tsk_list.c; sourceTree = SOURCE_ROOT; };
ECED631D10F98DC5006B4DC9 /* tsk_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_list.h; path = ../../tinySAK/src/tsk_list.h; sourceTree = SOURCE_ROOT; };
ECED631E10F98DC5006B4DC9 /* tsk_macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_macros.h; path = ../../tinySAK/src/tsk_macros.h; sourceTree = SOURCE_ROOT; };
ECED631F10F98DC5006B4DC9 /* tsk_md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_md5.c; path = ../../tinySAK/src/tsk_md5.c; sourceTree = SOURCE_ROOT; };
ECED632010F98DC5006B4DC9 /* tsk_md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_md5.h; path = ../../tinySAK/src/tsk_md5.h; sourceTree = SOURCE_ROOT; };
ECED632110F98DC5006B4DC9 /* tsk_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_memory.c; path = ../../tinySAK/src/tsk_memory.c; sourceTree = SOURCE_ROOT; };
ECED632210F98DC5006B4DC9 /* tsk_memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_memory.h; path = ../../tinySAK/src/tsk_memory.h; sourceTree = SOURCE_ROOT; };
ECED632310F98DC5006B4DC9 /* tsk_mutex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_mutex.c; path = ../../tinySAK/src/tsk_mutex.c; sourceTree = SOURCE_ROOT; };
ECED632410F98DC5006B4DC9 /* tsk_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_mutex.h; path = ../../tinySAK/src/tsk_mutex.h; sourceTree = SOURCE_ROOT; };
ECED632510F98DC5006B4DC9 /* tsk_object.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_object.c; path = ../../tinySAK/src/tsk_object.c; sourceTree = SOURCE_ROOT; };
ECED632610F98DC5006B4DC9 /* tsk_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_object.h; path = ../../tinySAK/src/tsk_object.h; sourceTree = SOURCE_ROOT; };
ECED632710F98DC5006B4DC9 /* tsk_params.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_params.c; path = ../../tinySAK/src/tsk_params.c; sourceTree = SOURCE_ROOT; };
ECED632810F98DC5006B4DC9 /* tsk_params.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_params.h; path = ../../tinySAK/src/tsk_params.h; sourceTree = SOURCE_ROOT; };
ECED632910F98DC5006B4DC9 /* tsk_ppfcs16.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_ppfcs16.c; path = ../../tinySAK/src/tsk_ppfcs16.c; sourceTree = SOURCE_ROOT; };
ECED632A10F98DC5006B4DC9 /* tsk_ppfcs16.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_ppfcs16.h; path = ../../tinySAK/src/tsk_ppfcs16.h; sourceTree = SOURCE_ROOT; };
ECED632B10F98DC5006B4DC9 /* tsk_runnable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_runnable.c; path = ../../tinySAK/src/tsk_runnable.c; sourceTree = SOURCE_ROOT; };
ECED632C10F98DC5006B4DC9 /* tsk_runnable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_runnable.h; path = ../../tinySAK/src/tsk_runnable.h; sourceTree = SOURCE_ROOT; };
ECED632D10F98DC5006B4DC9 /* tsk_safeobj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_safeobj.c; path = ../../tinySAK/src/tsk_safeobj.c; sourceTree = SOURCE_ROOT; };
ECED632E10F98DC5006B4DC9 /* tsk_safeobj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_safeobj.h; path = ../../tinySAK/src/tsk_safeobj.h; sourceTree = SOURCE_ROOT; };
ECED632F10F98DC5006B4DC9 /* tsk_semaphore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_semaphore.c; path = ../../tinySAK/src/tsk_semaphore.c; sourceTree = SOURCE_ROOT; };
ECED633010F98DC5006B4DC9 /* tsk_semaphore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_semaphore.h; path = ../../tinySAK/src/tsk_semaphore.h; sourceTree = SOURCE_ROOT; };
ECED633110F98DC5006B4DC9 /* tsk_sha1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_sha1.c; path = ../../tinySAK/src/tsk_sha1.c; sourceTree = SOURCE_ROOT; };
ECED633210F98DC5006B4DC9 /* tsk_sha1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_sha1.h; path = ../../tinySAK/src/tsk_sha1.h; sourceTree = SOURCE_ROOT; };
ECED633310F98DC5006B4DC9 /* tsk_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_string.c; path = ../../tinySAK/src/tsk_string.c; sourceTree = SOURCE_ROOT; };
ECED633410F98DC5006B4DC9 /* tsk_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_string.h; path = ../../tinySAK/src/tsk_string.h; sourceTree = SOURCE_ROOT; };
ECED633510F98DC5006B4DC9 /* tsk_thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_thread.c; path = ../../tinySAK/src/tsk_thread.c; sourceTree = SOURCE_ROOT; };
ECED633610F98DC5006B4DC9 /* tsk_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_thread.h; path = ../../tinySAK/src/tsk_thread.h; sourceTree = SOURCE_ROOT; };
ECED633710F98DC5006B4DC9 /* tsk_time.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_time.c; path = ../../tinySAK/src/tsk_time.c; sourceTree = SOURCE_ROOT; };
ECED633810F98DC5006B4DC9 /* tsk_time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_time.h; path = ../../tinySAK/src/tsk_time.h; sourceTree = SOURCE_ROOT; };
ECED633910F98DC5006B4DC9 /* tsk_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_timer.c; path = ../../tinySAK/src/tsk_timer.c; sourceTree = SOURCE_ROOT; };
ECED633A10F98DC5006B4DC9 /* tsk_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_timer.h; path = ../../tinySAK/src/tsk_timer.h; sourceTree = SOURCE_ROOT; };
ECED633B10F98DC5006B4DC9 /* tsk_url.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_url.c; path = ../../tinySAK/src/tsk_url.c; sourceTree = SOURCE_ROOT; };
ECED633C10F98DC5006B4DC9 /* tsk_url.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_url.h; path = ../../tinySAK/src/tsk_url.h; sourceTree = SOURCE_ROOT; };
ECED633D10F98DC5006B4DC9 /* tsk_xml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_xml.c; path = ../../tinySAK/src/tsk_xml.c; sourceTree = SOURCE_ROOT; };
ECED633E10F98DC5006B4DC9 /* tsk_xml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_xml.h; path = ../../tinySAK/src/tsk_xml.h; sourceTree = SOURCE_ROOT; };
ECED638910F99166006B4DC9 /* test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test; sourceTree = BUILT_PRODUCTS_DIR; };
ECED639310F9918E006B4DC9 /* rfc4465_torture_tests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rfc4465_torture_tests.h; path = ../../tinySIGCOMP/test/rfc4465_torture_tests.h; sourceTree = SOURCE_ROOT; };
ECED639410F9918E006B4DC9 /* stdafx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stdafx.c; path = ../../tinySIGCOMP/test/stdafx.c; sourceTree = SOURCE_ROOT; };
ECED639510F9918E006B4DC9 /* stdafx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = ../../tinySIGCOMP/test/stdafx.h; sourceTree = SOURCE_ROOT; };
ECED639610F9918E006B4DC9 /* targetver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = targetver.h; path = ../../tinySIGCOMP/test/targetver.h; sourceTree = SOURCE_ROOT; };
ECED639710F9918E006B4DC9 /* test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = test.c; path = ../../tinySIGCOMP/test/test.c; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D289988505E68E00004EDB86 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ECED637710F98DEC006B4DC9 /* libtinySAK.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED630310F98D55006B4DC9 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED638710F99166006B4DC9 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ECED639110F99173006B4DC9 /* libtinySAK.dylib in Frameworks */,
ECED639210F99173006B4DC9 /* libtinySIGCOMP.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
08FB7794FE84155DC02AAC07 /* tinySIGCOMP */ = {
isa = PBXGroup;
children = (
ECED639B10F99193006B4DC9 /* test */,
ECED630910F98DA7006B4DC9 /* tinySAK */,
ECED627610F98C41006B4DC9 /* asm */,
ECED627310F98C27006B4DC9 /* include */,
08FB7795FE84155DC02AAC07 /* Source */,
1AB674ADFE9D54B511CA2CBB /* Products */,
);
name = tinySIGCOMP;
sourceTree = "<group>";
};
08FB7795FE84155DC02AAC07 /* Source */ = {
isa = PBXGroup;
children = (
ECED629410F98C67006B4DC9 /* tcomp_dicts.c */,
ECED629810F98C67006B4DC9 /* tcomp_manager.c */,
ECED629A10F98C67006B4DC9 /* tcomp_message.c */,
ECED629310F98C67006B4DC9 /* tcomp_deflatedata.zlib.c */,
ECED629D10F98C67006B4DC9 /* tcomp_nackinfo.c */,
ECED62AF10F98C67006B4DC9 /* tcomp_udvm.c */,
ECED62A010F98C67006B4DC9 /* tcomp_params.c */,
ECED62A210F98C67006B4DC9 /* tcomp_reqfeed.c */,
ECED62A410F98C67006B4DC9 /* tcomp_result.c */,
ECED62A910F98C67006B4DC9 /* tcomp_state.c */,
ECED62AB10F98C67006B4DC9 /* tcomp_statehandler.c */,
ECED62AE10F98C67006B4DC9 /* tcomp_udvm.bytecopy.c */,
ECED62B110F98C67006B4DC9 /* tcomp_udvm.instructions.c */,
ECED62B210F98C67006B4DC9 /* tcomp_udvm.nack.c */,
ECED62B310F98C67006B4DC9 /* tcomp_udvm.operands.c */,
ECED62B410F98C67006B4DC9 /* tcomp_udvm.statemanagment.c */,
ECED62B610F98C67006B4DC9 /* trees.c */,
ECED627B10F98C67006B4DC9 /* adler32.c */,
ECED627C10F98C67006B4DC9 /* compress.c */,
ECED627D10F98C67006B4DC9 /* deflate.c */,
ECED627F10F98C67006B4DC9 /* tcomp.c */,
ECED628110F98C67006B4DC9 /* tcomp_buffer.c */,
ECED628310F98C67006B4DC9 /* tcomp_compartment.c */,
ECED628610F98C67006B4DC9 /* tcomp_compressor_deflate.c */,
ECED628810F98C67006B4DC9 /* tcomp_compressor_dummy.c */,
ECED628A10F98C67006B4DC9 /* tcomp_compressordata.c */,
ECED628C10F98C67006B4DC9 /* tcomp_compressordisp.c */,
ECED628E10F98C67006B4DC9 /* tcomp_decompressordisp.c */,
ECED629010F98C67006B4DC9 /* tcomp_deflatedata.c */,
ECED629110F98C67006B4DC9 /* tcomp_deflatedata.ghost.c */,
ECED62BA10F98C67006B4DC9 /* zutil.c */,
);
name = Source;
sourceTree = "<group>";
};
1AB674ADFE9D54B511CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
D2AAC0630554660B00DB518D /* libtinySIGCOMP.dylib */,
ECED630510F98D55006B4DC9 /* libtinySAK.dylib */,
ECED638910F99166006B4DC9 /* test */,
);
name = Products;
sourceTree = "<group>";
};
ECED627310F98C27006B4DC9 /* include */ = {
isa = PBXGroup;
children = (
ECED627E10F98C67006B4DC9 /* deflate.h */,
ECED628010F98C67006B4DC9 /* tcomp.h */,
ECED628210F98C67006B4DC9 /* tcomp_buffer.h */,
ECED628410F98C67006B4DC9 /* tcomp_compartment.h */,
ECED628510F98C67006B4DC9 /* tcomp_compressor.h */,
ECED628710F98C67006B4DC9 /* tcomp_compressor_deflate.h */,
ECED628910F98C67006B4DC9 /* tcomp_compressor_dummy.h */,
ECED628B10F98C67006B4DC9 /* tcomp_compressordata.h */,
ECED628D10F98C67006B4DC9 /* tcomp_compressordisp.h */,
ECED628F10F98C67006B4DC9 /* tcomp_decompressordisp.h */,
ECED629210F98C67006B4DC9 /* tcomp_deflatedata.h */,
ECED629510F98C67006B4DC9 /* tcomp_dicts.h */,
ECED629610F98C67006B4DC9 /* tcomp_headers_index.h */,
ECED629710F98C67006B4DC9 /* tcomp_instructions.h */,
ECED629910F98C67006B4DC9 /* tcomp_manager.h */,
ECED629B10F98C67006B4DC9 /* tcomp_message.h */,
ECED629C10F98C67006B4DC9 /* tcomp_nack_codes.h */,
ECED629E10F98C67006B4DC9 /* tcomp_nackinfo.h */,
ECED629F10F98C67006B4DC9 /* tcomp_operands.h */,
ECED62A110F98C67006B4DC9 /* tcomp_params.h */,
ECED62A310F98C67006B4DC9 /* tcomp_reqfeed.h */,
ECED62A510F98C67006B4DC9 /* tcomp_result.h */,
ECED62A610F98C67006B4DC9 /* tcomp_rfc3485_dictionary_sip.h */,
ECED62A710F98C67006B4DC9 /* tcomp_rfc5049_sip.h */,
ECED62A810F98C67006B4DC9 /* tcomp_rfc5112_dictionary_presence.h */,
ECED62AA10F98C67006B4DC9 /* tcomp_state.h */,
ECED62AC10F98C67006B4DC9 /* tcomp_statehandler.h */,
ECED62AD10F98C67006B4DC9 /* tcomp_types.h */,
ECED62B010F98C67006B4DC9 /* tcomp_udvm.h */,
ECED62B510F98C67006B4DC9 /* tinysigcomp_config.h */,
ECED62B710F98C67006B4DC9 /* trees.h */,
ECED62B810F98C67006B4DC9 /* zconf.h */,
ECED62B910F98C67006B4DC9 /* zlib.h */,
ECED62BB10F98C67006B4DC9 /* zutil.h */,
);
name = include;
sourceTree = "<group>";
};
ECED630910F98DA7006B4DC9 /* tinySAK */ = {
isa = PBXGroup;
children = (
ECED630A10F98DC5006B4DC9 /* tinySAK_config.h */,
ECED630B10F98DC5006B4DC9 /* tsk.c */,
ECED630C10F98DC5006B4DC9 /* tsk.h */,
ECED630D10F98DC5006B4DC9 /* tsk_base64.c */,
ECED630E10F98DC5006B4DC9 /* tsk_base64.h */,
ECED630F10F98DC5006B4DC9 /* tsk_binaryutils.c */,
ECED631010F98DC5006B4DC9 /* tsk_binaryutils.h */,
ECED631110F98DC5006B4DC9 /* tsk_buffer.c */,
ECED631210F98DC5006B4DC9 /* tsk_buffer.h */,
ECED631310F98DC5006B4DC9 /* tsk_condwait.c */,
ECED631410F98DC5006B4DC9 /* tsk_condwait.h */,
ECED631510F98DC5006B4DC9 /* tsk_debug.c */,
ECED631610F98DC5006B4DC9 /* tsk_debug.h */,
ECED631710F98DC5006B4DC9 /* tsk_errno.h */,
ECED631810F98DC5006B4DC9 /* tsk_heap.c */,
ECED631910F98DC5006B4DC9 /* tsk_heap.h */,
ECED631A10F98DC5006B4DC9 /* tsk_hmac.c */,
ECED631B10F98DC5006B4DC9 /* tsk_hmac.h */,
ECED631C10F98DC5006B4DC9 /* tsk_list.c */,
ECED631D10F98DC5006B4DC9 /* tsk_list.h */,
ECED631E10F98DC5006B4DC9 /* tsk_macros.h */,
ECED631F10F98DC5006B4DC9 /* tsk_md5.c */,
ECED632010F98DC5006B4DC9 /* tsk_md5.h */,
ECED632110F98DC5006B4DC9 /* tsk_memory.c */,
ECED632210F98DC5006B4DC9 /* tsk_memory.h */,
ECED632310F98DC5006B4DC9 /* tsk_mutex.c */,
ECED632410F98DC5006B4DC9 /* tsk_mutex.h */,
ECED632510F98DC5006B4DC9 /* tsk_object.c */,
ECED632610F98DC5006B4DC9 /* tsk_object.h */,
ECED632710F98DC5006B4DC9 /* tsk_params.c */,
ECED632810F98DC5006B4DC9 /* tsk_params.h */,
ECED632910F98DC5006B4DC9 /* tsk_ppfcs16.c */,
ECED632A10F98DC5006B4DC9 /* tsk_ppfcs16.h */,
ECED632B10F98DC5006B4DC9 /* tsk_runnable.c */,
ECED632C10F98DC5006B4DC9 /* tsk_runnable.h */,
ECED632D10F98DC5006B4DC9 /* tsk_safeobj.c */,
ECED632E10F98DC5006B4DC9 /* tsk_safeobj.h */,
ECED632F10F98DC5006B4DC9 /* tsk_semaphore.c */,
ECED633010F98DC5006B4DC9 /* tsk_semaphore.h */,
ECED633110F98DC5006B4DC9 /* tsk_sha1.c */,
ECED633210F98DC5006B4DC9 /* tsk_sha1.h */,
ECED633310F98DC5006B4DC9 /* tsk_string.c */,
ECED633410F98DC5006B4DC9 /* tsk_string.h */,
ECED633510F98DC5006B4DC9 /* tsk_thread.c */,
ECED633610F98DC5006B4DC9 /* tsk_thread.h */,
ECED633710F98DC5006B4DC9 /* tsk_time.c */,
ECED633810F98DC5006B4DC9 /* tsk_time.h */,
ECED633910F98DC5006B4DC9 /* tsk_timer.c */,
ECED633A10F98DC5006B4DC9 /* tsk_timer.h */,
ECED633B10F98DC5006B4DC9 /* tsk_url.c */,
ECED633C10F98DC5006B4DC9 /* tsk_url.h */,
ECED633D10F98DC5006B4DC9 /* tsk_xml.c */,
ECED633E10F98DC5006B4DC9 /* tsk_xml.h */,
);
name = tinySAK;
sourceTree = "<group>";
};
ECED639B10F99193006B4DC9 /* test */ = {
isa = PBXGroup;
children = (
ECED639310F9918E006B4DC9 /* rfc4465_torture_tests.h */,
ECED639410F9918E006B4DC9 /* stdafx.c */,
ECED639510F9918E006B4DC9 /* stdafx.h */,
ECED639610F9918E006B4DC9 /* targetver.h */,
ECED639710F9918E006B4DC9 /* test.c */,
);
name = test;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D2AAC0600554660B00DB518D /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
ECED62BF10F98C67006B4DC9 /* deflate.h in Headers */,
ECED62C110F98C67006B4DC9 /* tcomp.h in Headers */,
ECED62C310F98C67006B4DC9 /* tcomp_buffer.h in Headers */,
ECED62C510F98C67006B4DC9 /* tcomp_compartment.h in Headers */,
ECED62C610F98C67006B4DC9 /* tcomp_compressor.h in Headers */,
ECED62C810F98C67006B4DC9 /* tcomp_compressor_deflate.h in Headers */,
ECED62CA10F98C67006B4DC9 /* tcomp_compressor_dummy.h in Headers */,
ECED62CC10F98C67006B4DC9 /* tcomp_compressordata.h in Headers */,
ECED62CE10F98C67006B4DC9 /* tcomp_compressordisp.h in Headers */,
ECED62D010F98C67006B4DC9 /* tcomp_decompressordisp.h in Headers */,
ECED62D310F98C67006B4DC9 /* tcomp_deflatedata.h in Headers */,
ECED62D610F98C67006B4DC9 /* tcomp_dicts.h in Headers */,
ECED62D710F98C67006B4DC9 /* tcomp_headers_index.h in Headers */,
ECED62D810F98C67006B4DC9 /* tcomp_instructions.h in Headers */,
ECED62DA10F98C67006B4DC9 /* tcomp_manager.h in Headers */,
ECED62DC10F98C67006B4DC9 /* tcomp_message.h in Headers */,
ECED62DD10F98C67006B4DC9 /* tcomp_nack_codes.h in Headers */,
ECED62DF10F98C67006B4DC9 /* tcomp_nackinfo.h in Headers */,
ECED62E010F98C67006B4DC9 /* tcomp_operands.h in Headers */,
ECED62E210F98C67006B4DC9 /* tcomp_params.h in Headers */,
ECED62E410F98C67006B4DC9 /* tcomp_reqfeed.h in Headers */,
ECED62E610F98C67006B4DC9 /* tcomp_result.h in Headers */,
ECED62E710F98C67006B4DC9 /* tcomp_rfc3485_dictionary_sip.h in Headers */,
ECED62E810F98C67006B4DC9 /* tcomp_rfc5049_sip.h in Headers */,
ECED62E910F98C67006B4DC9 /* tcomp_rfc5112_dictionary_presence.h in Headers */,
ECED62EB10F98C67006B4DC9 /* tcomp_state.h in Headers */,
ECED62ED10F98C67006B4DC9 /* tcomp_statehandler.h in Headers */,
ECED62EE10F98C67006B4DC9 /* tcomp_types.h in Headers */,
ECED62F110F98C67006B4DC9 /* tcomp_udvm.h in Headers */,
ECED62F610F98C67006B4DC9 /* tinysigcomp_config.h in Headers */,
ECED62F810F98C67006B4DC9 /* trees.h in Headers */,
ECED62F910F98C67006B4DC9 /* zconf.h in Headers */,
ECED62FA10F98C67006B4DC9 /* zlib.h in Headers */,
ECED62FC10F98C67006B4DC9 /* zutil.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED630110F98D55006B4DC9 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
ECED633F10F98DC5006B4DC9 /* tinySAK_config.h in Headers */,
ECED634110F98DC5006B4DC9 /* tsk.h in Headers */,
ECED634310F98DC5006B4DC9 /* tsk_base64.h in Headers */,
ECED634510F98DC5006B4DC9 /* tsk_binaryutils.h in Headers */,
ECED634710F98DC5006B4DC9 /* tsk_buffer.h in Headers */,
ECED634910F98DC5006B4DC9 /* tsk_condwait.h in Headers */,
ECED634B10F98DC5006B4DC9 /* tsk_debug.h in Headers */,
ECED634C10F98DC5006B4DC9 /* tsk_errno.h in Headers */,
ECED634E10F98DC5006B4DC9 /* tsk_heap.h in Headers */,
ECED635010F98DC5006B4DC9 /* tsk_hmac.h in Headers */,
ECED635210F98DC5006B4DC9 /* tsk_list.h in Headers */,
ECED635310F98DC5006B4DC9 /* tsk_macros.h in Headers */,
ECED635510F98DC5006B4DC9 /* tsk_md5.h in Headers */,
ECED635710F98DC5006B4DC9 /* tsk_memory.h in Headers */,
ECED635910F98DC5006B4DC9 /* tsk_mutex.h in Headers */,
ECED635B10F98DC5006B4DC9 /* tsk_object.h in Headers */,
ECED635D10F98DC5006B4DC9 /* tsk_params.h in Headers */,
ECED635F10F98DC5006B4DC9 /* tsk_ppfcs16.h in Headers */,
ECED636110F98DC5006B4DC9 /* tsk_runnable.h in Headers */,
ECED636310F98DC5006B4DC9 /* tsk_safeobj.h in Headers */,
ECED636510F98DC5006B4DC9 /* tsk_semaphore.h in Headers */,
ECED636710F98DC5006B4DC9 /* tsk_sha1.h in Headers */,
ECED636910F98DC5006B4DC9 /* tsk_string.h in Headers */,
ECED636B10F98DC5006B4DC9 /* tsk_thread.h in Headers */,
ECED636D10F98DC5006B4DC9 /* tsk_time.h in Headers */,
ECED636F10F98DC5006B4DC9 /* tsk_timer.h in Headers */,
ECED637110F98DC5006B4DC9 /* tsk_url.h in Headers */,
ECED637310F98DC5006B4DC9 /* tsk_xml.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D2AAC0620554660B00DB518D /* tinySIGCOMP */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1DEB914A08733D8E0010E9CD /* Build configuration list for PBXNativeTarget "tinySIGCOMP" */;
buildPhases = (
D2AAC0600554660B00DB518D /* Headers */,
D2AAC0610554660B00DB518D /* Sources */,
D289988505E68E00004EDB86 /* Frameworks */,
);
buildRules = (
);
dependencies = (
ECED637610F98DE8006B4DC9 /* PBXTargetDependency */,
);
name = tinySIGCOMP;
productName = tinySIGCOMP;
productReference = D2AAC0630554660B00DB518D /* libtinySIGCOMP.dylib */;
productType = "com.apple.product-type.library.dynamic";
};
ECED630410F98D55006B4DC9 /* tinySAK */ = {
isa = PBXNativeTarget;
buildConfigurationList = ECED630810F98D73006B4DC9 /* Build configuration list for PBXNativeTarget "tinySAK" */;
buildPhases = (
ECED630110F98D55006B4DC9 /* Headers */,
ECED630210F98D55006B4DC9 /* Sources */,
ECED630310F98D55006B4DC9 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = tinySAK;
productName = tinySAK;
productReference = ECED630510F98D55006B4DC9 /* libtinySAK.dylib */;
productType = "com.apple.product-type.library.dynamic";
};
ECED638810F99166006B4DC9 /* test */ = {
isa = PBXNativeTarget;
buildConfigurationList = ECED639A10F9918E006B4DC9 /* Build configuration list for PBXNativeTarget "test" */;
buildPhases = (
ECED638610F99166006B4DC9 /* Sources */,
ECED638710F99166006B4DC9 /* Frameworks */,
);
buildRules = (
);
dependencies = (
ECED638E10F9916E006B4DC9 /* PBXTargetDependency */,
ECED639010F9916E006B4DC9 /* PBXTargetDependency */,
);
name = test;
productName = test;
productReference = ECED638910F99166006B4DC9 /* test */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
08FB7793FE84155DC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "tinySIGCOMP" */;
compatibilityVersion = "Xcode 3.1";
hasScannedForEncodings = 1;
mainGroup = 08FB7794FE84155DC02AAC07 /* tinySIGCOMP */;
projectDirPath = "";
projectRoot = "";
targets = (
D2AAC0620554660B00DB518D /* tinySIGCOMP */,
ECED630410F98D55006B4DC9 /* tinySAK */,
ECED638810F99166006B4DC9 /* test */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
D2AAC0610554660B00DB518D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ECED62BC10F98C67006B4DC9 /* adler32.c in Sources */,
ECED62BD10F98C67006B4DC9 /* compress.c in Sources */,
ECED62BE10F98C67006B4DC9 /* deflate.c in Sources */,
ECED62C010F98C67006B4DC9 /* tcomp.c in Sources */,
ECED62C210F98C67006B4DC9 /* tcomp_buffer.c in Sources */,
ECED62C410F98C67006B4DC9 /* tcomp_compartment.c in Sources */,
ECED62C710F98C67006B4DC9 /* tcomp_compressor_deflate.c in Sources */,
ECED62C910F98C67006B4DC9 /* tcomp_compressor_dummy.c in Sources */,
ECED62CB10F98C67006B4DC9 /* tcomp_compressordata.c in Sources */,
ECED62CD10F98C67006B4DC9 /* tcomp_compressordisp.c in Sources */,
ECED62CF10F98C67006B4DC9 /* tcomp_decompressordisp.c in Sources */,
ECED62D110F98C67006B4DC9 /* tcomp_deflatedata.c in Sources */,
ECED62D210F98C67006B4DC9 /* tcomp_deflatedata.ghost.c in Sources */,
ECED62D410F98C67006B4DC9 /* tcomp_deflatedata.zlib.c in Sources */,
ECED62D510F98C67006B4DC9 /* tcomp_dicts.c in Sources */,
ECED62D910F98C67006B4DC9 /* tcomp_manager.c in Sources */,
ECED62DB10F98C67006B4DC9 /* tcomp_message.c in Sources */,
ECED62DE10F98C67006B4DC9 /* tcomp_nackinfo.c in Sources */,
ECED62E110F98C67006B4DC9 /* tcomp_params.c in Sources */,
ECED62E310F98C67006B4DC9 /* tcomp_reqfeed.c in Sources */,
ECED62E510F98C67006B4DC9 /* tcomp_result.c in Sources */,
ECED62EA10F98C67006B4DC9 /* tcomp_state.c in Sources */,
ECED62EC10F98C67006B4DC9 /* tcomp_statehandler.c in Sources */,
ECED62EF10F98C67006B4DC9 /* tcomp_udvm.bytecopy.c in Sources */,
ECED62F010F98C67006B4DC9 /* tcomp_udvm.c in Sources */,
ECED62F210F98C67006B4DC9 /* tcomp_udvm.instructions.c in Sources */,
ECED62F310F98C67006B4DC9 /* tcomp_udvm.nack.c in Sources */,
ECED62F410F98C67006B4DC9 /* tcomp_udvm.operands.c in Sources */,
ECED62F510F98C67006B4DC9 /* tcomp_udvm.statemanagment.c in Sources */,
ECED62F710F98C67006B4DC9 /* trees.c in Sources */,
ECED62FB10F98C67006B4DC9 /* zutil.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED630210F98D55006B4DC9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ECED634010F98DC5006B4DC9 /* tsk.c in Sources */,
ECED634210F98DC5006B4DC9 /* tsk_base64.c in Sources */,
ECED634410F98DC5006B4DC9 /* tsk_binaryutils.c in Sources */,
ECED634610F98DC5006B4DC9 /* tsk_buffer.c in Sources */,
ECED634810F98DC5006B4DC9 /* tsk_condwait.c in Sources */,
ECED634A10F98DC5006B4DC9 /* tsk_debug.c in Sources */,
ECED634D10F98DC5006B4DC9 /* tsk_heap.c in Sources */,
ECED634F10F98DC5006B4DC9 /* tsk_hmac.c in Sources */,
ECED635110F98DC5006B4DC9 /* tsk_list.c in Sources */,
ECED635410F98DC5006B4DC9 /* tsk_md5.c in Sources */,
ECED635610F98DC5006B4DC9 /* tsk_memory.c in Sources */,
ECED635810F98DC5006B4DC9 /* tsk_mutex.c in Sources */,
ECED635A10F98DC5006B4DC9 /* tsk_object.c in Sources */,
ECED635C10F98DC5006B4DC9 /* tsk_params.c in Sources */,
ECED635E10F98DC5006B4DC9 /* tsk_ppfcs16.c in Sources */,
ECED636010F98DC5006B4DC9 /* tsk_runnable.c in Sources */,
ECED636210F98DC5006B4DC9 /* tsk_safeobj.c in Sources */,
ECED636410F98DC5006B4DC9 /* tsk_semaphore.c in Sources */,
ECED636610F98DC5006B4DC9 /* tsk_sha1.c in Sources */,
ECED636810F98DC5006B4DC9 /* tsk_string.c in Sources */,
ECED636A10F98DC5006B4DC9 /* tsk_thread.c in Sources */,
ECED636C10F98DC5006B4DC9 /* tsk_time.c in Sources */,
ECED636E10F98DC5006B4DC9 /* tsk_timer.c in Sources */,
ECED637010F98DC5006B4DC9 /* tsk_url.c in Sources */,
ECED637210F98DC5006B4DC9 /* tsk_xml.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ECED638610F99166006B4DC9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ECED639810F9918E006B4DC9 /* stdafx.c in Sources */,
ECED639910F9918E006B4DC9 /* test.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
ECED637610F98DE8006B4DC9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = ECED630410F98D55006B4DC9 /* tinySAK */;
targetProxy = ECED637510F98DE8006B4DC9 /* PBXContainerItemProxy */;
};
ECED638E10F9916E006B4DC9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = D2AAC0620554660B00DB518D /* tinySIGCOMP */;
targetProxy = ECED638D10F9916E006B4DC9 /* PBXContainerItemProxy */;
};
ECED639010F9916E006B4DC9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = ECED630410F98D55006B4DC9 /* tinySAK */;
targetProxy = ECED638F10F9916E006B4DC9 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
1DEB914B08733D8E0010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
EXECUTABLE_PREFIX = lib;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = tinySIGCOMP;
};
name = Debug;
};
1DEB914C08733D8E0010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EXECUTABLE_PREFIX = lib;
GCC_MODEL_TUNING = G5;
INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = tinySIGCOMP;
};
name = Release;
};
1DEB914F08733D8E0010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DDEBUG_LEVEL=DEBUG_LEVEL_INFO";
PREBINDING = NO;
SDKROOT = macosx10.5;
};
name = Debug;
};
1DEB915008733D8E0010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
SDKROOT = macosx10.5;
};
name = Release;
};
ECED630610F98D55006B4DC9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
EXECUTABLE_PREFIX = lib;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INSTALL_PATH = /usr/local/lib;
PREBINDING = NO;
PRODUCT_NAME = tinySAK;
};
name = Debug;
};
ECED630710F98D55006B4DC9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EXECUTABLE_PREFIX = lib;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_MODEL_TUNING = G5;
INSTALL_PATH = /usr/local/lib;
PREBINDING = NO;
PRODUCT_NAME = tinySAK;
ZERO_LINK = NO;
};
name = Release;
};
ECED638B10F99167006B4DC9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
INSTALL_PATH = /usr/local/bin;
OTHER_CFLAGS = "-DDEBUG_LEVEL=DEBUG_LEVEL_INFO";
PREBINDING = NO;
PRODUCT_NAME = test;
};
name = Debug;
};
ECED638C10F99167006B4DC9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_MODEL_TUNING = G5;
INSTALL_PATH = /usr/local/bin;
PREBINDING = NO;
PRODUCT_NAME = test;
ZERO_LINK = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1DEB914A08733D8E0010E9CD /* Build configuration list for PBXNativeTarget "tinySIGCOMP" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB914B08733D8E0010E9CD /* Debug */,
1DEB914C08733D8E0010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "tinySIGCOMP" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB914F08733D8E0010E9CD /* Debug */,
1DEB915008733D8E0010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
ECED630810F98D73006B4DC9 /* Build configuration list for PBXNativeTarget "tinySAK" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ECED630610F98D55006B4DC9 /* Debug */,
ECED630710F98D55006B4DC9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
ECED639A10F9918E006B4DC9 /* Build configuration list for PBXNativeTarget "test" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ECED638B10F99167006B4DC9 /* Debug */,
ECED638C10F99167006B4DC9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff