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

View File

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

View File

@ -32,18 +32,19 @@
#include "tsk_string.h"
#include "tsk_debug.h"
#include "tsk_thread.h"
#include "tsk_buffer.h"
#if TNET_USE_POLL
#include "tnet_poll.h"
#include <unistd.h>
#define TNET_MAX_FDS 64
/*== Socket description ==*/
typedef struct transport_socket_s
{
char *buffer;
size_t bufsize;
tnet_fd_t fd;
unsigned connected:1;
}
@ -234,7 +235,30 @@ bail:
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 ==*/
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 ==*/
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 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;
}
//signal(...);
if(context)
{
// signal using pipe[1]
write(context->sockets[1]->fd, &c, 1);
}
return tsk_thread_join(transport->mainThreadId);
}
@ -289,6 +343,7 @@ void *tnet_transport_mainthread(void *param)
{
tnet_transport_t *transport = param;
transport_context_t *context;
tnet_fd_t pipes[2];
int ret;
size_t i;
@ -307,6 +362,15 @@ void *tnet_transport_mainthread(void *param)
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. */
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);
while(transport->running)
while(TSK_RUNNABLE(transport)->running)
{
if((ret = tnet_poll(context->ufds, context->count, -1)) < 0)
{
TNET_PRINT_LAST_ERROR();
goto bail;
}
if(!transport->running)
if(!TSK_RUNNABLE(transport)->running)
{
goto bail;
}
@ -342,21 +407,28 @@ void *tnet_transport_mainthread(void *param)
/*================== 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);
/* Create socket's internal buffer. */
if(!active_socket->buffer)
/* Retrieve the amount of pending data */
if(tnet_ioctlt(active_socket->fd, FIONREAD, &len) < 0)
{
// FIXME: see win32 function
size_t max_buffer_size = TNET_SOCKET_TYPE_IS_DGRAM(transport->master->type) ? DGRAM_MAX_SIZE : STREAM_MAX_SIZE;
active_socket->buffer = tsk_calloc(max_buffer_size, sizeof(char));
active_socket->bufsize = max_buffer_size;
TSK_DEBUG_ERROR("IOCTLT FAILED.");
TNET_PRINT_LAST_ERROR();
continue;
}
if(!(buffer = tsk_calloc(len, sizeof(uint8_t))))
{
TSK_DEBUG_ERROR("TSK_CALLOC FAILED.");
continue;
}
/* 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)
{
//TSK_DEBUG_INFO("WSAEWOULDBLOCK error for READ operation");
@ -370,7 +442,14 @@ void *tnet_transport_mainthread(void *param)
}
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.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tnet_types.h
* @brief ????.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TNET_TYPES_H
#define TNET_TYPES_H
#include "tinyNET_config.h"
#if TNET_UNDER_WINDOWS
# include <winsock2.h>
# include <ws2tcpip.h>
#else
# include <sys/types.h>
# include <sys/socket.h>
# include <sys/select.h>
# include <netinet/in.h>
# include <arpa/inet.h>
# include <netdb.h>
# include <fcntl.h>
# if TNET_HAVE_POLL
# include <poll.h>
# endif /* TNET_HAVE_POLL */
#endif
#include "tsk_errno.h"
TNET_BEGIN_DECLS
typedef int32_t tnet_fd_t;
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
# define TNET_ERROR_INPROGRESS WSAEINPROGRESS
#else
# define TNET_INVALID_SOCKET -1
# define TNET_ERROR_WOULDBLOCK EWOULDBLOCK
# define TNET_ERROR_INPROGRESS EINPROGRESS
#endif
#define TNET_INVALID_FD TNET_INVALID_SOCKET
#ifdef _WIN32_WCE
typedef TCHAR tnet_error_t[512];
#else
typedef char tnet_error_t[512];
#endif
TNET_END_DECLS
#endif /* TNET_TYPES_H */
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tnet_types.h
* @brief ????.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TNET_TYPES_H
#define TNET_TYPES_H
#include "tinyNET_config.h"
#if TNET_UNDER_WINDOWS
# include <winsock2.h>
# include <ws2tcpip.h>
#else
# include <sys/types.h>
# include <sys/socket.h>
# include <sys/select.h>
# include <netinet/in.h>
# include <arpa/inet.h>
# include <netdb.h>
# include <fcntl.h>
# include <sys/ioctl.h>
# include <unistd.h>
# if TNET_HAVE_POLL
# include <poll.h>
# endif /* TNET_HAVE_POLL */
#endif
#include "tsk_errno.h"
TNET_BEGIN_DECLS
typedef int32_t tnet_fd_t;
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
# define TNET_ERROR_INPROGRESS WSAEINPROGRESS
#else
# define TNET_INVALID_SOCKET -1
# define TNET_ERROR_WOULDBLOCK EWOULDBLOCK
# define TNET_ERROR_INPROGRESS EINPROGRESS
#endif
#define TNET_INVALID_FD TNET_INVALID_SOCKET
#ifdef _WIN32_WCE
typedef TCHAR tnet_error_t[512];
#else
typedef char tnet_error_t[512];
#endif
TNET_END_DECLS
#endif /* TNET_TYPES_H */

View File

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

View File

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

View File

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

View File

@ -35,10 +35,11 @@
TSK_BEGIN_DECLS
#define TSK_DECLARE_SAFEOBJ\
union{ \
tsk_mutex_handle_t *mutex; \
}
//#define TSK_DECLARE_SAFEOBJ\
// union{ \
// tsk_mutex_handle_t *mutex; \
// }
#define TSK_DECLARE_SAFEOBJ tsk_mutex_handle_t *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;
}
#if defined(DEBUG) || defined(_DEBUG)
#if defined(DEBUG) || defined(_DEBUG) || !defined(NDEBUG)
void tsk_timer_manager_debug(tsk_timer_manager_handle_t *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;
tsk_mutex_lock(manager->mutex);
tsk_list_push_ascending_data(manager->timers, ((void**) &timer));
//tsk_timer_manager_debug(self);
tsk_mutex_unlock(manager->mutex);
tsk_timer_manager_debug(self);
tsk_condwait_signal(manager->condwait);
tsk_semaphore_increment(manager->sem);
@ -263,7 +264,7 @@ static void *__tsk_timer_manager_mainthread(void *param)
uint64_t epoch;
tsk_timer_manager_t *manager = param;
//TSK_DEBUG_INFO("TIMER MANAGER -- START");
TSK_DEBUG_INFO("TIMER MANAGER -- START");
manager->active = 1;
while(TSK_RUNNABLE(manager)->running)
@ -280,7 +281,7 @@ peek_first:
curr = TSK_TIMER_GET_FIRST();
tsk_mutex_unlock(manager->mutex);
if(!curr->canceled)
if(curr && !curr->canceled)
{
epoch = tsk_time_epoch();
if(epoch >= curr->timeout)
@ -304,7 +305,7 @@ peek_first:
}
}
}
else
else if(curr)
{
tsk_mutex_lock(manager->mutex);
tsk_list_remove_item_by_data(manager->timers, curr);
@ -313,7 +314,7 @@ peek_first:
}
manager->active = 0;
//TSK_DEBUG_INFO("TIMER MANAGER -- STOP");
TSK_DEBUG_INFO("TIMER MANAGER -- STOP");
return 0;
}

View File

@ -33,7 +33,7 @@
#define LOOP 1
#define RUN_TEST_ALL 0
#define RUN_TEST_ALL 1
#define RUN_TEST_LISTS 0
#define RUN_TEST_HEAP 0
#define RUN_TEST_STRINGS 0
@ -49,7 +49,7 @@
#define RUN_TEST_BUFFER 0
#define RUN_TEST_MD5 0
#define RUN_TEST_SHA1 0
#define RUN_TEST_BASE64 1
#define RUN_TEST_BASE64 0
#if RUN_TEST_LISTS || RUN_TEST_ALL
#include "test_lists.h"
@ -80,7 +80,7 @@
#endif
#if RUN_TEST_SAFEOBJECT || RUN_TEST_ALL
#include "test_safeobject.h"
//#include "test_safeobject.h"
#endif
#if RUN_TEST_OBJECT || RUN_TEST_ALL
@ -179,7 +179,7 @@ int main()
#if RUN_TEST_SAFEOBJECT || RUN_TEST_ALL
/* safe object */
test_safeobject();
//test_safeobject();
printf("\n\n");
#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
* @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)
{
@ -147,7 +147,7 @@ const size_t tcomp_buffer_getSize(const tcomp_buffer_handle_t* handle) /*const*/
* Gets the remainning 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)
{

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);
#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*/;
const size_t tcomp_buffer_getRemainingBits(const tcomp_buffer_handle_t* handle) /*const*/;
TINYSIGCOMP_API size_t tcomp_buffer_getSize(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);
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)
{
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);
#endif
/* Initialize safeobject */
tsk_safeobj_init(compartment);

View File

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

View File

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

View File

@ -35,6 +35,8 @@
#include "tsk_memory.h"
#include "tsk_debug.h"
#include <string.h>
/**@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
* endpoint.
@ -136,7 +138,7 @@ int tcomp_compressordisp_compress(tcomp_compressordisp_t *dispatcher, uint64_t c
tsk_sha1reset(&sha);
tsk_sha1input(&sha, (const uint8_t*)output_ptr, *output_size);
tsk_sha1result(&sha, nackId);
tsk_sha1result(&sha, (char*)nackId);
tcomp_compartment_addNack(lpCompartment, nackId);
}

View File

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

View File

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

View File

@ -34,6 +34,8 @@
#include "tsk_binaryutils.h"
#include "tsk_sha1.h"
#include <string.h>
/**@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
* 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, 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 */
@ -130,11 +130,19 @@ static void* tcomp_state_create(void * self, va_list * app)
tcomp_state_t *state = self;
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->address = va_arg(*app, uint16_t);
state->instruction = va_arg(*app, uint16_t);
state->minimum_access_length = va_arg(*app, uint16_t);
state->retention_priority = va_arg(*app, uint16_t);
#endif
state->value = TCOMP_BUFFER_CREATE();
state->identifier = TCOMP_BUFFER_CREATE();

View File

@ -33,6 +33,7 @@
#include "tsk_debug.h"
#include "tsk_ppfcs16.h"
#include <string.h> /* memcpy */
#include <stdlib.h> /* qsort */
#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;
}
if( (err = tsk_sha1result(&sha, Message_Digest)) )
if( (err = tsk_sha1result(&sha, (char*)Message_Digest)) )
{
ok = 0;
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
* and 16 inclusive.
*/
if(length<0 || length>16)
if(/*length<0 ||*/ length>16)
{
tcomp_udvm_createNackInfo2(udvm, NACK_INVALID_OPERAND);
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_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

View File

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

View File

@ -1,251 +1,256 @@
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tsip_message.h
* @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.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TSIP_MESSAGE_H
#define TSIP_MESSAGE_H
#include "tinysip_config.h"
#include "tinysip/headers/tsip_header_Call_ID.h"
#include "tinysip/headers/tsip_header_Contact.h"
#include "tinysip/headers/tsip_header_Content_Length.h"
#include "tinysip/headers/tsip_header_Content_Type.h"
#include "tinysip/headers/tsip_header_CSeq.h"
#include "tinysip/headers/tsip_header_Expires.h"
#include "tinysip/headers/tsip_header_From.h"
#include "tinysip/headers/tsip_header_P_Access_Network_Info.h"
#include "tinysip/headers/tsip_header_To.h"
#include "tinysip/headers/tsip_header_Via.h"
#include "tnet_types.h"
#include "tsk_object.h"
#include "tsk_buffer.h"
TSIP_BEGIN_DECLS
#define TSIP_MESSAGE_VERSION_10 "SIP/1.0"
#define TSIP_MESSAGE_VERSION_20 "SIP/2.0"
#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_RESPONSE(self) ((self) ? (self)->type == tsip_response : 0)
#define TSIP_MESSAGE(self) ((tsip_message_t*)(self))
#define TSIP_MESSAGE_AS_RESPONSE(self) ((tsip_response_t*)(self))
#define TSIP_MESSAGE_AS_REQUEST(self) ((tsip_request_t*)(self))
/**@def TSIP_MESSAGE_CREATE
* Creates new sip messgae. Could be either a request or a response.
* You must call @ref TSIP_MESSAGE_SAFE_FREE to free the message.
* @sa TSIP_MESSAGE_SAFE_FREE.
*/
/**@def TSIP_MESSAGE_SAFE_FREE
* Safely free a sip messgae previously created using 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_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_MESSAGE_SAFE_FREE(self) tsk_object_unref(self), self = 0
#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_CODE(self) ((self)->line_status.status_code)
#define TSIP_RESPONSE_PHRASE(self) ((self)->line_status.reason_phrase)
#define TSIP_REQUEST_METHOD(self) ((self)->line_request.method)
#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(message) (TSIP_MESSAGE_HAS_CONTENT(message) ? (message)->Content : 0)
#define TSIP_MESSAGE_HAS_CONTENT(message) ((message) && (message)->Content)
#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_1XX(self) TSIP_RESPONSE_IS_NXX(self, 1)
#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_4XX(self) TSIP_RESPONSE_IS_NXX(self, 4)
#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_23456(self) (200<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= 699)
/**
* @enum tsip_message_type_t
*
* @brief Defines the message type (Request or Response).
**/
typedef enum tsip_message_type_e
{
tsip_unknown,
tsip_request,
tsip_response
}
tsip_message_type_t;
/**
* @struct tsip_request_line_t
*
* @brief Defines SIP request header line.
* ABNF: Request-Line = Method SP Request-URI SP SIP-Version CRLF
* Ref: RFC 3261 subclause 7.1.
* @sa tsip_status_line_t.
*
* @author Mamadou
* @date 12/3/2009
**/
typedef struct tsip_request_line_s
{
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
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 "<>". */
}
tsip_request_line_t;
/**
* @struct tsip_status_line_t
*
* @brief Defines SIP response status line.
* ABNF: Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
* Ref: RFC 3261 subclause 7.2.
* @sa tsip_request_line_t.
*
* @author Mamadou
* @date 12/3/2009
**/
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. */
char *reason_phrase; /**< Textual description related to the status code. */
}
tsip_status_line_t;
/**
* @struct tsip_message_t
*
* @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.
* You must call @ref TSIP_MESSAGE_CREATE to create a sip message and TSIP_MESSAGE_SAFE_FREE to free the message.
*
* @author Mamadou
* @date 12/2/2009
**/
typedef struct tsip_message_s
{
TSK_DECLARE_OBJECT;
char *sip_version; /**< The SIP version. Only 'SIP/2.0' is supported. */
tsip_message_type_t type; /**< The type of this SIP message. */
union
{
tsip_request_line_t line_request; /**< Request status line. Only if message type is @ref tsip_request. */
tsip_status_line_t line_status; /**< Status line. Only if message type is @ref tsip_response. */
};
/*== MOST COMMON HEADERS. */
tsip_header_Via_t *firstVia; /**< First Via header. */
tsip_header_From_t *From;
tsip_header_To_t *To;
tsip_header_Contact_t *Contact;
tsip_header_Call_ID_t *Call_ID;
tsip_header_CSeq_t *CSeq;
tsip_header_Expires_t *Expires;
tsip_header_Content_Type_t *Content_Type;
tsip_header_Content_Length_t *Content_Length;
tsk_buffer_t *Content;
/*== OTHER HEADERS*/
tsip_headers_L_t *headers;
/*== */
tnet_fd_t sockfd;
}
tsip_message_t;
typedef tsip_message_t tsip_request_t; /**< SIP request message. */
typedef tsip_message_t tsip_response_t; /**< SIP response message. */
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);
#if !defined(_MSC_VER) || defined(__GNUC__)
static void TSIP_MESSAGE_ADD_HEADER(tsip_message_t *self, ...)
{
va_list ap;
tsip_header_t *header;
const tsk_object_def_t *objdef;
va_start(ap, self);
objdef = va_arg(ap, const tsk_object_def_t*);
header = tsk_object_new2(objdef, &ap);
va_end(ap);
tsip_message_add_header(self, header);
tsk_object_unref(header);
}
#else
#define TSIP_MESSAGE_ADD_HEADER(self, objdef, ...) \
{ \
tsip_header_t *header = tsk_object_new(objdef, __VA_ARGS__); \
tsip_message_add_header(self, header); \
tsk_object_unref(header); \
}
#endif
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 TSIP_BOOLEAN tsip_message_supported(const tsip_message_t *self, const char* option);
TINYSIP_API TSIP_BOOLEAN tsip_message_required(const tsip_message_t *self, const char* option);
TINYSIP_API int32_t tsip_message_getExpires(const tsip_message_t *message);
TINYSIP_API uint32_t tsip_message_getContent_length(const tsip_message_t *message);
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 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);
TINYSIP_GEXTERN const void *tsip_message_def_t;
TSIP_END_DECLS
#endif /* TSIP_MESSAGE_H */
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tsip_message.h
* @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.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TSIP_MESSAGE_H
#define TSIP_MESSAGE_H
#include "tinysip_config.h"
#include "tinysip/headers/tsip_header_Call_ID.h"
#include "tinysip/headers/tsip_header_Contact.h"
#include "tinysip/headers/tsip_header_Content_Length.h"
#include "tinysip/headers/tsip_header_Content_Type.h"
#include "tinysip/headers/tsip_header_CSeq.h"
#include "tinysip/headers/tsip_header_Expires.h"
#include "tinysip/headers/tsip_header_From.h"
#include "tinysip/headers/tsip_header_P_Access_Network_Info.h"
#include "tinysip/headers/tsip_header_To.h"
#include "tinysip/headers/tsip_header_Via.h"
#include "tnet_types.h"
#include "tsk_object.h"
#include "tsk_buffer.h"
TSIP_BEGIN_DECLS
#define TSIP_MESSAGE_VERSION_10 "SIP/1.0"
#define TSIP_MESSAGE_VERSION_20 "SIP/2.0"
#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_RESPONSE(self) ((self) ? (self)->type == tsip_response : 0)
#define TSIP_MESSAGE(self) ((tsip_message_t*)(self))
#define TSIP_MESSAGE_AS_RESPONSE(self) ((tsip_response_t*)(self))
#define TSIP_MESSAGE_AS_REQUEST(self) ((tsip_request_t*)(self))
/**@def TSIP_MESSAGE_CREATE
* Creates new sip messgae. Could be either a request or a response.
* You must call @ref TSIP_MESSAGE_SAFE_FREE to free the message.
* @sa TSIP_MESSAGE_SAFE_FREE.
*/
/**@def TSIP_MESSAGE_SAFE_FREE
* Safely free a sip messgae previously created using 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_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_MESSAGE_SAFE_FREE(self) tsk_object_unref(self), self = 0
#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_CODE(self) ((self)->line_status.status_code)
#define TSIP_RESPONSE_PHRASE(self) ((self)->line_status.reason_phrase)
#define TSIP_REQUEST_METHOD(self) ((self)->line_request.method)
#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(message) (TSIP_MESSAGE_HAS_CONTENT(message) ? (message)->Content : 0)
#define TSIP_MESSAGE_HAS_CONTENT(message) ((message) && (message)->Content)
#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_1XX(self) TSIP_RESPONSE_IS_NXX(self, 1)
#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_4XX(self) TSIP_RESPONSE_IS_NXX(self, 4)
#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_23456(self) (200<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= 699)
/**
* @enum tsip_message_type_t
*
* @brief Defines the message type (Request or Response).
**/
typedef enum tsip_message_type_e
{
tsip_unknown,
tsip_request,
tsip_response
}
tsip_message_type_t;
/**
* @struct tsip_request_line_t
*
* @brief Defines SIP request header line.
* ABNF: Request-Line = Method SP Request-URI SP SIP-Version CRLF
* Ref: RFC 3261 subclause 7.1.
* @sa tsip_status_line_t.
*
* @author Mamadou
* @date 12/3/2009
**/
typedef struct tsip_request_line_s
{
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
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 "<>". */
}
tsip_request_line_t;
/**
* @struct tsip_status_line_t
*
* @brief Defines SIP response status line.
* ABNF: Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
* Ref: RFC 3261 subclause 7.2.
* @sa tsip_request_line_t.
*
* @author Mamadou
* @date 12/3/2009
**/
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. */
char *reason_phrase; /**< Textual description related to the status code. */
}
tsip_status_line_t;
/**
* @struct tsip_message_t
*
* @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.
* You must call @ref TSIP_MESSAGE_CREATE to create a sip message and TSIP_MESSAGE_SAFE_FREE to free the message.
*
* @author Mamadou
* @date 12/2/2009
**/
typedef struct tsip_message_s
{
TSK_DECLARE_OBJECT;
char *sip_version; /**< The SIP version. Only 'SIP/2.0' is supported. */
tsip_message_type_t type; /**< The type of this SIP message. */
// 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__)
union
{
#endif
tsip_request_line_t line_request; /**< Request status line. Only if message type is @ref tsip_request. */
tsip_status_line_t line_status; /**< Status line. Only if message type is @ref tsip_response. */
#if !defined(__GNUC__)
};
#endif
/*== MOST COMMON HEADERS. */
tsip_header_Via_t *firstVia; /**< First Via header. */
tsip_header_From_t *From;
tsip_header_To_t *To;
tsip_header_Contact_t *Contact;
tsip_header_Call_ID_t *Call_ID;
tsip_header_CSeq_t *CSeq;
tsip_header_Expires_t *Expires;
tsip_header_Content_Type_t *Content_Type;
tsip_header_Content_Length_t *Content_Length;
tsk_buffer_t *Content;
/*== OTHER HEADERS*/
tsip_headers_L_t *headers;
/*== */
tnet_fd_t sockfd;
}
tsip_message_t;
typedef tsip_message_t tsip_request_t; /**< SIP request message. */
typedef tsip_message_t tsip_response_t; /**< SIP response message. */
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);
#if !defined(_MSC_VER) || defined(__GNUC__)
static void TSIP_MESSAGE_ADD_HEADER(tsip_message_t *self, ...)
{
va_list ap;
tsip_header_t *header;
const tsk_object_def_t *objdef;
va_start(ap, self);
objdef = va_arg(ap, const tsk_object_def_t*);
header = tsk_object_new2(objdef, &ap);
va_end(ap);
tsip_message_add_header(self, header);
tsk_object_unref(header);
}
#else
#define TSIP_MESSAGE_ADD_HEADER(self, objdef, ...) \
{ \
tsip_header_t *header = tsk_object_new(objdef, __VA_ARGS__); \
tsip_message_add_header(self, header); \
tsk_object_unref(header); \
}
#endif
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 TSIP_BOOLEAN tsip_message_supported(const tsip_message_t *self, const char* option);
TINYSIP_API TSIP_BOOLEAN tsip_message_required(const tsip_message_t *self, const char* option);
TINYSIP_API int32_t tsip_message_getExpires(const tsip_message_t *message);
TINYSIP_API uint32_t tsip_message_getContent_length(const tsip_message_t *message);
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 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);
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
int tsip_challenge_get_akares(const tsip_challenge_t *self, char const *password, char** result)
{
#define SQN_XOR_AK() (AUTN + 0)
#define SERVER_DATA() (nonce + AKA_RAND_SIZE + AKA_AUTN_SIZE)
// § ==> XOR
// || ==> append
AKA_RES_T akares;
int ret = -1;
size_t n;
char *nonce = 0;
AKA_XXX_DELCLARE(RAND);
AKA_XXX_DELCLARE(AK);
AKA_XXX_DELCLARE(AMF);
AKA_XXX_DELCLARE(CK);
AKA_XXX_DELCLARE(IK);
AKA_XXX_DELCLARE(K);
AKA_XXX_DELCLARE(SQN);
AKA_XXX_DELCLARE(MAC_A);
AKA_XXX_DELCLARE(AUTN);
AKA_XXX_BZERO(RAND);
AKA_XXX_BZERO(AK);
AKA_XXX_BZERO(AMF);
AKA_XXX_BZERO(CK);
AKA_XXX_BZERO(IK);
AKA_XXX_BZERO(K);
AKA_XXX_BZERO(SQN);
AKA_XXX_BZERO(MAC_A);
AKA_XXX_BZERO(AUTN);
/* RFC 3310 subclause 3.2: nonce = base64(RAND || AUTN || SERV_DATA)
*/
n = tsk_base64_decode(self->nonce, strlen(self->nonce), &nonce);
if(n > TSK_MD5_STRING_SIZE)
{
TSK_DEBUG_ERROR("The IMS CORE returned an invalid nonce.");
goto bail;
}
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]");
goto bail;
}
else
{
/* Get RAND and AUTN
*/
memcpy(RAND, nonce, AKA_RAND_SIZE);
memcpy(AUTN, (nonce + AKA_RAND_SIZE), AKA_AUTN_SIZE);
}
/* Secret key
*/
memcpy(K, password, (strlen(password) > AKA_K_SIZE ? AKA_K_SIZE : strlen(password)));
/* 3GPP TS 35.205: AUTN = SQN[§AK] || AMF || MAC-A
*/
memcpy(AMF, (AUTN + AKA_SQN_SIZE), AKA_AMF_SIZE);
memcpy(MAC_A, (AUTN + AKA_SQN_SIZE + AKA_AMF_SIZE), AKA_MAC_A_SIZE);
/* compute OP
*/
ComputeOP(TSIP_CHALLENGE_STACK(self)->operator_id);
/* Checks that we hold the same AMF
*/
for(n=0; n<AKA_AMF_SIZE; n++)
{
if(AMF[n] != TSIP_CHALLENGE_STACK(self)->amf[n])
{
TSK_DEBUG_ERROR("AMF <> XAMF");
goto bail;
}
}
/* Calculate CK, IK and AK
*/
f2345(K, RAND, akares, CK, IK, AK);
/* Calculate SQN from SQN_XOR_AK
*/
for(n=0; n<AKA_SQN_SIZE; n++)
{
SQN[n] = (uint8_t) (SQN_XOR_AK()[n] ^ AK[n]);
}
/* Calculate XMAC_A
*/
{
AKA_MAC_A_T XMAC_A;
f1(K, RAND, SQN, AMF, XMAC_A);
if(!tsk_strnequals(MAC_A, XMAC_A, AKA_MAC_A_SIZE))
{
TSK_DEBUG_ERROR("XMAC_A <> MAC_A");
goto bail;
}
}
#define SQN_XOR_AK() (AUTN + 0)
#define SERVER_DATA() (nonce + AKA_RAND_SIZE + AKA_AUTN_SIZE)
// § ==> XOR
// || ==> append
AKA_RES_T akares;
int ret = -1;
size_t n;
char *nonce = 0;
AKA_XXX_DELCLARE(RAND);
AKA_XXX_DELCLARE(AK);
AKA_XXX_DELCLARE(AMF);
AKA_XXX_DELCLARE(CK);
AKA_XXX_DELCLARE(IK);
AKA_XXX_DELCLARE(K);
AKA_XXX_DELCLARE(SQN);
AKA_XXX_DELCLARE(MAC_A);
AKA_XXX_DELCLARE(AUTN);
AKA_XXX_BZERO(RAND);
AKA_XXX_BZERO(AK);
AKA_XXX_BZERO(AMF);
AKA_XXX_BZERO(CK);
AKA_XXX_BZERO(IK);
AKA_XXX_BZERO(K);
AKA_XXX_BZERO(SQN);
AKA_XXX_BZERO(MAC_A);
AKA_XXX_BZERO(AUTN);
/* RFC 3310 subclause 3.2: nonce = base64(RAND || AUTN || SERV_DATA)
*/
n = tsk_base64_decode((const uint8_t*)self->nonce, strlen(self->nonce), &nonce);
if(n > TSK_MD5_STRING_SIZE)
{
TSK_DEBUG_ERROR("The IMS CORE returned an invalid nonce.");
goto bail;
}
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]");
goto bail;
}
else
{
/* Get RAND and AUTN
*/
memcpy(RAND, nonce, AKA_RAND_SIZE);
memcpy(AUTN, (nonce + AKA_RAND_SIZE), AKA_AUTN_SIZE);
}
/* Secret key
*/
memcpy(K, password, (strlen(password) > AKA_K_SIZE ? AKA_K_SIZE : strlen(password)));
/* 3GPP TS 35.205: AUTN = SQN[§AK] || AMF || MAC-A
*/
memcpy(AMF, (AUTN + AKA_SQN_SIZE), AKA_AMF_SIZE);
memcpy(MAC_A, (AUTN + AKA_SQN_SIZE + AKA_AMF_SIZE), AKA_MAC_A_SIZE);
/* compute OP
*/
ComputeOP(TSIP_CHALLENGE_STACK(self)->operator_id);
/* Checks that we hold the same AMF
*/
for(n=0; n<AKA_AMF_SIZE; n++)
{
if(AMF[n] != TSIP_CHALLENGE_STACK(self)->amf[n])
{
TSK_DEBUG_ERROR("AMF <> XAMF");
goto bail;
}
}
/* Calculate CK, IK and AK
*/
f2345(K, RAND, akares, CK, IK, AK);
/* Calculate SQN from SQN_XOR_AK
*/
for(n=0; n<AKA_SQN_SIZE; n++)
{
SQN[n] = (uint8_t) (SQN_XOR_AK()[n] ^ AK[n]);
}
/* Calculate XMAC_A
*/
{
AKA_MAC_A_T XMAC_A;
f1(K, RAND, SQN, AMF, XMAC_A);
if(!tsk_strnequals(MAC_A, XMAC_A, AKA_MAC_A_SIZE))
{
TSK_DEBUG_ERROR("XMAC_A <> MAC_A");
goto bail;
}
}
/* RFC 4169 subclause 3
The HTTP Digest password is derived from base64 encoded PRF(RES || IK||CK, "http-digest-akav2-password")
or
PRF(XRES||IK||CK, "http-digest-akav2-password") instead of (RES) or (XRES) respectively.
Where PRF ==> HMAC_MD5 function.
*/
if(TSIP_CHALLENGE_IS_AKAv2(self))
{
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 + 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 + AKA_CK_SIZE), "http-digest-akav2-password", 26);
ret = ((tsk_base64_encode(res_ik_ck, sizeof(res_ik_ck), result)>0) ? 0 : -2);
}
else
{
*result = tsk_calloc(1, AKA_RES_SIZE + 1);
memcpy(*result, akares, AKA_RES_SIZE);
ret = 0;
}
bail:
TSK_FREE(nonce);
PRF(XRES||IK||CK, "http-digest-akav2-password") instead of (RES) or (XRES) respectively.
Where PRF ==> HMAC_MD5 function.
*/
if(TSIP_CHALLENGE_IS_AKAv2(self))
{
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 + 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 + AKA_CK_SIZE), "http-digest-akav2-password", 26);
ret = ((tsk_base64_encode(res_ik_ck, sizeof(res_ik_ck), result)>0) ? 0 : -2);
}
else
{
*result = tsk_calloc(1, AKA_RES_SIZE + 1);
memcpy(*result, akares, AKA_RES_SIZE);
ret = 0;
}
bail:
TSK_FREE(nonce);
return ret;
#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;
nonce_count_t nc;
/* ===
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.
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))
{
char* akaresult = 0;
tsip_challenge_get_akares(self, TSIP_CHALLENGE_STACK(self)->password, &akaresult);
if(thttp_auth_digest_HA1(TSIP_CHALLENGE_USERNAME(self), self->realm, akaresult, &ha1))
{
// return -1;
}
TSK_FREE(akaresult);
/* ===
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.
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))
{
char* akaresult = 0;
tsip_challenge_get_akares(self, TSIP_CHALLENGE_STACK(self)->password, &akaresult);
if(thttp_auth_digest_HA1(TSIP_CHALLENGE_USERNAME(self), self->realm, akaresult, &ha1))
{
// return -1;
}
TSK_FREE(akaresult);
}
else
{
@ -234,7 +234,7 @@ int tsip_challenge_get_response(tsip_challenge_t *self, const char* method, cons
/* ===
HA2
*/
*/
thttp_auth_digest_HA2(method,
uristring,
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
*/
{
tsk_istr_t port;
tsk_istr_t 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",
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->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->host : "",
request->line_request.uri->port ? ":" : "",
request->line_request.uri->port ? port : ""
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->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->host ? (request->line_request.uri->user_name ? "@" : "") : "",
request->line_request.uri->host ? request->line_request.uri->host : "",
request->line_request.uri->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
//
/**@ingroup tsip_challenge_group
*/
static void* tsip_challenge_create(void *self, va_list * app)
{
tsip_challenge_t *challenge = self;
if(challenge)
{
const char* qop;
challenge->stack = va_arg(*app, const tsip_stack_handle_t *);
challenge->isproxy = va_arg(*app, unsigned);
challenge->scheme = 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->opaque = tsk_strdup(va_arg(*app, const char*));
challenge->algorithm = tsk_strdup(va_arg(*app, const char*));
qop = va_arg(*app, const char*);
//========================================================
// SIP challenge object definition
//
/**@ingroup tsip_challenge_group
*/
static void* tsip_challenge_create(void *self, va_list * app)
{
tsip_challenge_t *challenge = self;
if(challenge)
{
const char* qop;
challenge->stack = va_arg(*app, const tsip_stack_handle_t *);
challenge->isproxy = va_arg(*app, unsigned);
challenge->scheme = 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->opaque = tsk_strdup(va_arg(*app, const char*));
challenge->algorithm = tsk_strdup(va_arg(*app, const char*));
qop = va_arg(*app, const char*);
challenge->qop = tsk_strcontains(qop, "auth-int") ? "auth-int" :
(tsk_strcontains(qop, "auth") ? "auth" : 0);
tsip_challenge_update_cnonce(challenge);
}
else TSK_DEBUG_ERROR("Failed to create new sip challenge object.");
return self;
}
/**@ingroup tsip_challenge_group
*/
static void* tsip_challenge_destroy(void *self)
{
tsip_challenge_t *challenge = self;
if(challenge)
{
TSK_FREE(challenge->scheme);
TSK_FREE(challenge->realm);
TSK_FREE(challenge->nonce);
TSK_FREE(challenge->opaque);
TSK_FREE(challenge->algorithm);
//TSK_FREE(challenge->qop);
}
else TSK_DEBUG_ERROR("Null SIP challenge object.");
return self;
}
static const tsk_object_def_t tsip_challenge_def_s =
{
sizeof(tsip_challenge_t),
tsip_challenge_create,
tsip_challenge_destroy,
0
};
(tsk_strcontains(qop, "auth") ? "auth" : 0);
tsip_challenge_update_cnonce(challenge);
}
else TSK_DEBUG_ERROR("Failed to create new sip challenge object.");
return self;
}
/**@ingroup tsip_challenge_group
*/
static void* tsip_challenge_destroy(void *self)
{
tsip_challenge_t *challenge = self;
if(challenge)
{
TSK_FREE(challenge->scheme);
TSK_FREE(challenge->realm);
TSK_FREE(challenge->nonce);
TSK_FREE(challenge->opaque);
TSK_FREE(challenge->algorithm);
//TSK_FREE(challenge->qop);
}
else TSK_DEBUG_ERROR("Null SIP challenge object.");
return self;
}
static const tsk_object_def_t tsip_challenge_def_s =
{
sizeof(tsip_challenge_t),
tsip_challenge_create,
tsip_challenge_destroy,
0
};
const void *tsip_challenge_def_t = &tsip_challenge_def_s;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -44,6 +44,7 @@
#include "tsk_time.h"
#include <stdarg.h>
#include <string.h>
void *run(void* self);
@ -110,7 +111,11 @@ int __tsip_stack_set(tsip_stack_t *self, va_list values)
}
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);
#endif
break;
}
case pname_privacy:
@ -257,7 +262,7 @@ int __tsip_stack_set(tsip_stack_t *self, va_list values)
return 0;
}
static __tsip_initialized = 0;
static unsigned __tsip_initialized = 0;
int tsip_global_init()
{
@ -513,8 +518,8 @@ int tsip_stack_unregister(tsip_stack_handle_t *self, const tsip_operation_handle
{
if(self && operation)
{
const tsip_stack_t *stack = self;
tsip_operation_handle_t *op = tsip_operation_clone(operation);
//const tsip_stack_t *stack = self;
//tsip_operation_handle_t *op = tsip_operation_clone(operation);
//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->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);
#endif
sipevent->reason_phrase = tsk_strdup(va_arg(*app, const char *));
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;
/*
RFC 3261 - 8.2.6.2 Headers and Tags
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
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
field values in the response MUST equal the Via header field values
in the request and MUST maintain the same ordering.
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
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
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
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
same tag MUST be used for all responses to that request, both final
and provisional (again excepting the 100 (Trying)). Procedures for
RFC 3261 - 8.2.6.2 Headers and Tags
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
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
field values in the response MUST equal the Via header field values
in the request and MUST maintain the same ordering.
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
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
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
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
same tag MUST be used for all responses to that request, both final
and provisional (again excepting the 100 (Trying)). Procedures for
the generation of tags are defined in Section 19.3.
*/
message->From = tsk_object_ref((void*)request->From);

View File

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

View File

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

View File

@ -228,8 +228,6 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@ -268,6 +266,7 @@
<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
<array>
<string>08FB7794FE84155DC02AAC07</string>
<string>EC6C560C10EDE6E9000E1B18</string>
<string>1C37FBAC04509CD000000102</string>
<string>1C37FAAC04509CD000000102</string>
<string>1C37FABC05509CD000000102</string>
@ -275,7 +274,9 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>13</integer>
<integer>20</integer>
<integer>1</integer>
<integer>0</integer>
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
@ -300,7 +301,7 @@
<real>164</real>
</array>
<key>RubberWindowFrame</key>
<string>434 256 1409 922 0 0 1920 1178 </string>
<string>166 234 1409 922 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -311,6 +312,8 @@
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@ -328,11 +331,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>EC6ACC8D10EF1356008C3507</string>
<string>ECED5F8410F968A9006B4DC9</string>
<key>history</key>
<array>
<string>EC6C565210EDEB09000E1B18</string>
<string>EC6C565710EDEB09000E1B18</string>
<string>EC74E44410EE983C001624A9</string>
<string>EC74E4A410EE9DC1001624A9</string>
<string>EC74E4A510EE9DC1001624A9</string>
@ -344,7 +346,6 @@
<string>EC6AC9B910EECE0E008C3507</string>
<string>EC6AC9BA10EECE0E008C3507</string>
<string>EC6AC9BB10EECE0E008C3507</string>
<string>EC6AC9EB10EED22F008C3507</string>
<string>EC6AC9EF10EED22F008C3507</string>
<string>EC6ACA1B10EED278008C3507</string>
<string>EC6ACA1C10EED278008C3507</string>
@ -359,33 +360,37 @@
<string>EC6ACBB410EF0973008C3507</string>
<string>EC6ACBB510EF0973008C3507</string>
<string>EC6ACBB610EF0973008C3507</string>
<string>EC6ACBB810EF0973008C3507</string>
<string>EC6ACBB910EF0973008C3507</string>
<string>EC6ACBBA10EF0973008C3507</string>
<string>EC6ACBBB10EF0973008C3507</string>
<string>EC6ACBBC10EF0973008C3507</string>
<string>EC6ACBBD10EF0973008C3507</string>
<string>EC6ACBBE10EF0973008C3507</string>
<string>EC6ACBBF10EF0973008C3507</string>
<string>EC6ACBC010EF0973008C3507</string>
<string>EC6ACBC110EF0973008C3507</string>
<string>EC6ACBC210EF0973008C3507</string>
<string>EC6ACBC310EF0973008C3507</string>
<string>EC6ACBC410EF0973008C3507</string>
<string>EC6ACBC510EF0973008C3507</string>
<string>EC6ACBC610EF0973008C3507</string>
<string>EC6ACBC710EF0973008C3507</string>
<string>EC6ACBC810EF0973008C3507</string>
<string>EC6ACBC910EF0973008C3507</string>
<string>EC6ACBCA10EF0973008C3507</string>
<string>EC6ACBCB10EF0973008C3507</string>
<string>EC6ACBCD10EF0973008C3507</string>
<string>EC6ACC3E10EF0BF1008C3507</string>
<string>EC6ACC3F10EF0BF1008C3507</string>
<string>EC6ACC4010EF0BF1008C3507</string>
<string>EC6ACC4210EF0BF1008C3507</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>
<key>prevStack</key>
<array>
@ -424,263 +429,28 @@
<string>EC6ACA5310EED607008C3507</string>
<string>EC6ACA5D10EEE689008C3507</string>
<string>EC6ACA6E10EEED43008C3507</string>
<string>EC6ACA8310EEF32E008C3507</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>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>EC6ACADD10EEFAE5008C3507</string>
<string>EC6ACADE10EEFAE5008C3507</string>
<string>EC6ACADF10EEFAE5008C3507</string>
<string>EC6ACAE010EEFAE5008C3507</string>
<string>EC6ACAE110EEFAE5008C3507</string>
<string>EC6ACAE210EEFAE5008C3507</string>
<string>EC6ACAE310EEFAE5008C3507</string>
<string>EC6ACAE410EEFAE5008C3507</string>
<string>EC6ACAE510EEFAE5008C3507</string>
<string>EC6ACAE610EEFAE5008C3507</string>
<string>EC6ACAE710EEFAE5008C3507</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>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>EC6ACBD010EF0973008C3507</string>
<string>EC6ACBD110EF0973008C3507</string>
<string>EC6ACBD210EF0973008C3507</string>
<string>EC6ACBD310EF0973008C3507</string>
<string>EC6ACBD410EF0973008C3507</string>
<string>EC6ACBD510EF0973008C3507</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>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>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>EC6ACC2310EF0973008C3507</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>EC6ACC2E10EF0973008C3507</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>EC6ACC4610EF0BF1008C3507</string>
<string>EC6ACC4710EF0BF1008C3507</string>
<string>EC6ACC4810EF0BF1008C3507</string>
<string>EC6ACC4910EF0BF1008C3507</string>
<string>EC6ACC4B10EF0BF1008C3507</string>
<string>EC6ACC7F10EF1061008C3507</string>
<string>ECD4DDA810F1439F00DB1682</string>
<string>ECD4DDAB10F1439F00DB1682</string>
</array>
</dict>
<key>SplitCount</key>
@ -694,7 +464,7 @@
<key>Frame</key>
<string>{{0, 0}, {1201, 515}}</string>
<key>RubberWindowFrame</key>
<string>434 256 1409 922 0 0 1920 1178 </string>
<string>166 234 1409 922 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@ -714,7 +484,7 @@
<key>Frame</key>
<string>{{0, 520}, {1201, 361}}</string>
<key>RubberWindowFrame</key>
<string>434 256 1409 922 0 0 1920 1178 </string>
<string>166 234 1409 922 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -738,9 +508,9 @@
</array>
<key>TableOfContents</key>
<array>
<string>EC6AC95510EEC5E9008C3507</string>
<string>ECED5F8510F968A9006B4DC9</string>
<string>1CE0B1FE06471DED0097A5F4</string>
<string>EC6AC95610EEC5E9008C3507</string>
<string>ECED5F8610F968A9006B4DC9</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@ -874,15 +644,10 @@
<integer>5</integer>
<key>WindowOrderList</key>
<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>
</array>
<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>
<array>
<dict>
@ -898,14 +663,12 @@
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>1CD0528F0623707200166675</string>
<key>PBXProjectModuleLabel</key>
<string>tsk_debug.h</string>
<string></string>
<key>StatusBarVisibility</key>
<true/>
</dict>
@ -961,7 +724,7 @@
<key>TableOfContents</key>
<array>
<string>EC6C55E710EDE640000E1B18</string>
<string>EC6AC97E10EEC94C008C3507</string>
<string>ECD2C9D010F1481800F2B7B3</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
@ -972,7 +735,7 @@
<key>WindowToolGUID</key>
<string>EC6C55E710EDE640000E1B18</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<key>FirstTimeWindowDisplayed</key>
@ -1003,8 +766,8 @@
<string>yes</string>
<key>sizes</key>
<array>
<string>{{0, 0}, {316, 202}}</string>
<string>{{316, 0}, {378, 202}}</string>
<string>{{0, 0}, {316, 203}}</string>
<string>{{316, 0}, {378, 203}}</string>
</array>
</dict>
<key>VerticalSplitView</key>
@ -1019,8 +782,8 @@
<string>yes</string>
<key>sizes</key>
<array>
<string>{{0, 0}, {694, 202}}</string>
<string>{{0, 202}, {694, 179}}</string>
<string>{{0, 0}, {694, 203}}</string>
<string>{{0, 203}, {694, 178}}</string>
</array>
</dict>
</dict>
@ -1053,7 +816,7 @@
<real>102</real>
</array>
<key>Frame</key>
<string>{{316, 0}, {378, 202}}</string>
<string>{{316, 0}, {378, 203}}</string>
<key>RubberWindowFrame</key>
<string>773 347 694 422 0 0 1920 1178 </string>
</dict>
@ -1081,13 +844,13 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
<string>EC6AC95710EEC5E9008C3507</string>
<string>ECD2C9D110F1481800F2B7B3</string>
<string>1C162984064C10D400B95A72</string>
<string>EC6AC95810EEC5E9008C3507</string>
<string>EC6AC95910EEC5E9008C3507</string>
<string>EC6AC95A10EEC5E9008C3507</string>
<string>EC6AC95B10EEC5E9008C3507</string>
<string>EC6AC95C10EEC5E9008C3507</string>
<string>ECD2C9D210F1481800F2B7B3</string>
<string>ECD2C9D310F1481800F2B7B3</string>
<string>ECD2C9D410F1481800F2B7B3</string>
<string>ECD2C9D510F1481800F2B7B3</string>
<string>ECD2C9D610F1481800F2B7B3</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
@ -1251,7 +1014,7 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
<string>EC6AC97F10EEC94C008C3507</string>
<string>ECD2C9D710F1481800F2B7B3</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>
@ -1261,7 +1024,7 @@
<key>WindowToolGUID</key>
<string>1C78EAAD065D492600B07095</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<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