diff --git a/trunk/tinyNET/src/dhcp/tnet_dhcp.c b/trunk/tinyNET/src/dhcp/tnet_dhcp.c index 41305673..e658727d 100644 --- a/trunk/tinyNET/src/dhcp/tnet_dhcp.c +++ b/trunk/tinyNET/src/dhcp/tnet_dhcp.c @@ -1,329 +1,329 @@ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* 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_dhcp.c - * @brief DHCP/BOOTP (RFC 2131 - Dynamic Host Configuration Protocol) utilities function for P-CSCF discovery(RFC 3319 and 3361). - * Also implement: RFC 3315, 3118, 3319, 3825 (Geoconf), 4676 (Civic Addresses Configuration Information) ... - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -#include "tnet_dhcp.h" - -#include "tsk_string.h" -#include "tsk_thread.h" -#include "tsk_memory.h" -#include "tsk_time.h" -#include "tsk_debug.h" - -//#include - -// Useful link: http://support.microsoft.com/?scid=kb%3Ben-us%3B169289&x=21&y=14 -// Another one: http://www.iana.org/assignments/bootp-dhcp-parameters/ -// Another one: http://www.slideshare.net/raini/DHCP-Presentation-v102 -// RFC 3319 Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP) Servers -// RFC 3361 Dynamic Host Configuration Protocol (DHCP-for-IPv4) Option for Session Initiation Protocol (SIP) Servers - - -/* FIXME: USE retransmission mech (*2*2...) -*/ -tnet_dhcp_reply_t* tnet_dhcp_send_request(tnet_dhcp_ctx_t* ctx, tnet_dhcp_request_t* request) -{ - tsk_buffer_t *output; - tnet_dhcp_reply_t* reply = 0; - int ret; - struct timeval tv; - fd_set set; - uint64_t timeout = 0; - tsk_list_item_t *item; - const tnet_interface_t *iface; - - tnet_socket_t *localsocket4 = 0; - struct sockaddr_storage server; - - if(!ctx || !request) - { - goto bail; - } - - localsocket4 = TNET_SOCKET_CREATE(TNET_SOCKET_HOST_ANY, ctx->port_client, tnet_socket_type_udp_ipv4); - if(!TNET_SOCKET_IS_VALID(localsocket4)) - { - TSK_DEBUG_ERROR("Failed to create/bind DHCP client socket."); - goto bail; - } - - /* Always wait for 200ms before retransmission */ - tv.tv_sec = 0; - tv.tv_usec = (200 * 1000); - - if(tnet_sockaddr_init("255.255.255.255", ctx->server_port, tnet_socket_type_udp_ipv4, &server)) - { - TNET_PRINT_LAST_ERROR("Failed to initialize the DHCP server address."); - goto bail; - } - - /* ENABLE BROADCASTING */ - { -#if defined(SOLARIS) - char yes = '1'; -#else - int yes = 1; -#endif - if(setsockopt(localsocket4->fd, SOL_SOCKET, SO_BROADCAST, (char*)&yes, sizeof(int))) - { - TSK_DEBUG_ERROR("Failed to enable broadcast option [errno=%d].", tnet_geterrno()); - goto bail; - } - } - - /* Set timeout */ - timeout = tsk_time_epoch() + ctx->timeout; - - do - { - /* RFC 2131 - 3.6 Use of DHCP in clients with multiple interfaces - A client with multiple network interfaces must use DHCP through each - interface independently to obtain configuration information - parameters for those separate interfaces. - */ - - tsk_list_foreach(item, ctx->interfaces) - { - iface = item->data; - - /* Set FD */ - FD_ZERO(&set); - FD_SET(localsocket4->fd, &set); - - /* ciaddr */ - if(request->type == dhcp_type_inform){ - struct sockaddr_storage ss; - if(!tnet_get_sockaddr(localsocket4->fd, &ss)){ - uint32_t addr = htonl((*((uint32_t*)&((struct sockaddr_in*)&ss)->sin_addr))); - memcpy(&request->ciaddr, &addr, 4); - } - } - - /* chaddr */ - memset(request->chaddr, 0, sizeof(request->chaddr)); - request->hlen = iface->mac_address_length > sizeof(request->chaddr) ? sizeof(request->chaddr) : iface->mac_address_length; - memcpy(request->chaddr, iface->mac_address, request->hlen); - - /* Serialize and send to the server. */ - if(!(output = tnet_dhcp_message_serialize(ctx, request))) - { - TSK_DEBUG_ERROR("Failed to serialize the DHCP message."); - goto next_iface; - } - /* Send the request to the DHCP server */ - if((ret =tnet_sockfd_sendto(localsocket4->fd, (const struct sockaddr*)&server, output->data, output->size))<0) - { - TNET_PRINT_LAST_ERROR("Failed to send DHCP request."); - - tsk_thread_sleep(150); // wait 150ms before trying the next iface. - goto next_iface; - } - /* wait for response */ - if((ret = select(localsocket4->fd+1, &set, NULL, NULL, &tv))<0) - { /* Error */ - TNET_PRINT_LAST_ERROR("select have failed."); - tsk_thread_sleep(150); // wait 150ms before trying the next iface. - goto next_iface; - } - else if(ret == 0) - { /* timeout ==> do nothing */ - } - else - { /* there is data to read */ - size_t len = 0; - void* data = 0; - - /* Check how how many bytes are pending */ - if((ret = tnet_ioctlt(localsocket4->fd, FIONREAD, &len))<0) - { - goto next_iface; - } - - /* Receive pending data */ - data = tsk_calloc(len, sizeof(uint8_t)); - if((ret = tnet_sockfd_recv(localsocket4->fd, data, len, 0))<0) - { - TSK_FREE(data); - - TNET_PRINT_LAST_ERROR("Failed to receive DHCP dgrams."); - goto next_iface; - } - - /* Parse the incoming response. */ - reply = tnet_dhcp_message_deserialize(ctx, data, len); - TSK_FREE(data); - - if(reply) - { /* response successfuly parsed */ - if(request->xid != reply->xid) - { /* Not same transaction id ==> continue*/ - TSK_OBJECT_SAFE_FREE(reply); - } - } - } - - next_iface: - TSK_OBJECT_SAFE_FREE(output); - if(reply){ - goto bail; - } - } - break;//FIXME - } - while(timeout > tsk_time_epoch()); - -bail: - TSK_OBJECT_SAFE_FREE(localsocket4); - - return reply; -} - -tnet_dhcp_reply_t* tnet_dhcp_query(tnet_dhcp_ctx_t* ctx, tnet_dhcp_message_type_t type, tnet_dhcp_params_t* params) -{ - tnet_dhcp_reply_t* reply = 0; - tnet_dhcp_request_t* request = TNET_DHCP_REQUEST_CREATE(); - - if(!ctx || !params || !request) - { - goto bail; - } - - request->type = type; - tnet_dhcp_message_add_codes(request, params->codes, params->codes_count); - - reply = tnet_dhcp_send_request(ctx, request); - -bail: - TSK_OBJECT_SAFE_FREE(request); - - return reply; -} - - -int tnet_dhcp_params_add_code(tnet_dhcp_params_t* params, tnet_dhcp_option_code_t code) -{ - if(params){ - if(params->codes_count < TNET_DHCP_MAX_CODES){ - unsigned i; - for(i=0; icodes_count; i++){ - if(params->codes[i] == code){ - return -3; - } - } - params->codes[params->codes_count++] = code; - } - else return -2; - } - return -1; -} - - - -//================================================================================================= -// [[DHCP CONTEXT]] object definition -// -static void* tnet_dhcp_ctx_create(void * self, va_list * app) -{ - tnet_dhcp_ctx_t *ctx = self; - if(ctx) - { - tnet_host_t host; - - ctx->vendor_id = tsk_strdup(TNET_DHCP_VENDOR_ID_DEFAULT); - if(!tnet_gethostname(&host)){ - ctx->hostname = tsk_strndup(host, strlen(host)); - } - ctx->timeout = TNET_DHCP_TIMEOUT_DEFAULT; - ctx->max_msg_size = TNET_DHCP_MAX_MSG_SIZE; - ctx->port_client = TNET_DHCP_CLIENT_PORT; - ctx->server_port = TNET_DHCP_SERVER_PORT; - ctx->interfaces = tnet_get_interfaces(); - - if(!ctx->interfaces || TSK_LIST_IS_EMPTY(ctx->interfaces)) - { - TSK_DEBUG_ERROR("Failed to retrieve network interfaces."); - } - - tsk_safeobj_init(ctx); - } - return self; -} - -static void* tnet_dhcp_ctx_destroy(void * self) -{ - tnet_dhcp_ctx_t *ctx = self; - if(ctx) - { - tsk_safeobj_deinit(ctx); - - TSK_FREE(ctx->vendor_id); - TSK_FREE(ctx->hostname); - - TSK_OBJECT_SAFE_FREE(ctx->interfaces); - } - return self; -} - -static const tsk_object_def_t tnet_dhcp_ctx_def_s = -{ - sizeof(tnet_dhcp_ctx_t), - tnet_dhcp_ctx_create, - tnet_dhcp_ctx_destroy, - 0, -}; -const void *tnet_dhcp_ctx_def_t = &tnet_dhcp_ctx_def_s; - -//================================================================================================= -// [[DHCP PARAMS]] object definition -// -static void* tnet_dhcp_params_create(void * self, va_list * app) -{ - tnet_dhcp_params_t *params = self; - if(params) - { - } - return self; -} - -static void* tnet_dhcp_params_destroy(void * self) -{ - tnet_dhcp_params_t *params = self; - if(params) - { - } - return self; -} - -static const tsk_object_def_t tnet_dhcp_params_def_s = -{ - sizeof(tnet_dhcp_params_t), - tnet_dhcp_params_create, - tnet_dhcp_params_destroy, - 0, -}; -const void *tnet_dhcp_params_def_t = &tnet_dhcp_params_def_s; +/* +* Copyright (C) 2009 Mamadou Diop. +* +* Contact: Mamadou Diop +* +* 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_dhcp.c + * @brief DHCP/BOOTP (RFC 2131 - Dynamic Host Configuration Protocol) utilities function for P-CSCF discovery(RFC 3319 and 3361). + * Also implement: RFC 3315, 3118, 3319, 3825 (Geoconf), 4676 (Civic Addresses Configuration Information) ... + * + * @author Mamadou Diop + * + * @date Created: Sat Nov 8 16:54:58 2009 mdiop + */ +#include "tnet_dhcp.h" + +#include "tsk_string.h" +#include "tsk_thread.h" +#include "tsk_memory.h" +#include "tsk_time.h" +#include "tsk_debug.h" + +#include + +// Useful link: http://support.microsoft.com/?scid=kb%3Ben-us%3B169289&x=21&y=14 +// Another one: http://www.iana.org/assignments/bootp-dhcp-parameters/ +// Another one: http://www.slideshare.net/raini/DHCP-Presentation-v102 +// RFC 3319 Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP) Servers +// RFC 3361 Dynamic Host Configuration Protocol (DHCP-for-IPv4) Option for Session Initiation Protocol (SIP) Servers + + +/* FIXME: USE retransmission mech (*2*2...) +*/ +tnet_dhcp_reply_t* tnet_dhcp_send_request(tnet_dhcp_ctx_t* ctx, tnet_dhcp_request_t* request) +{ + tsk_buffer_t *output; + tnet_dhcp_reply_t* reply = 0; + int ret; + struct timeval tv; + fd_set set; + uint64_t timeout = 0; + tsk_list_item_t *item; + const tnet_interface_t *iface; + + tnet_socket_t *localsocket4 = 0; + struct sockaddr_storage server; + + if(!ctx || !request) + { + goto bail; + } + + localsocket4 = TNET_SOCKET_CREATE(TNET_SOCKET_HOST_ANY, ctx->port_client, tnet_socket_type_udp_ipv4); + if(!TNET_SOCKET_IS_VALID(localsocket4)) + { + TSK_DEBUG_ERROR("Failed to create/bind DHCP client socket."); + goto bail; + } + + /* Always wait for 200ms before retransmission */ + tv.tv_sec = 0; + tv.tv_usec = (200 * 1000); + + if(tnet_sockaddr_init("255.255.255.255", ctx->server_port, tnet_socket_type_udp_ipv4, &server)) + { + TNET_PRINT_LAST_ERROR("Failed to initialize the DHCP server address."); + goto bail; + } + + /* ENABLE BROADCASTING */ + { +#if defined(SOLARIS) + char yes = '1'; +#else + int yes = 1; +#endif + if(setsockopt(localsocket4->fd, SOL_SOCKET, SO_BROADCAST, (char*)&yes, sizeof(int))) + { + TSK_DEBUG_ERROR("Failed to enable broadcast option [errno=%d].", tnet_geterrno()); + goto bail; + } + } + + /* Set timeout */ + timeout = tsk_time_epoch() + ctx->timeout; + + do + { + /* RFC 2131 - 3.6 Use of DHCP in clients with multiple interfaces + A client with multiple network interfaces must use DHCP through each + interface independently to obtain configuration information + parameters for those separate interfaces. + */ + + tsk_list_foreach(item, ctx->interfaces) + { + iface = item->data; + + /* Set FD */ + FD_ZERO(&set); + FD_SET(localsocket4->fd, &set); + + /* ciaddr */ + if(request->type == dhcp_type_inform){ + struct sockaddr_storage ss; + if(!tnet_get_sockaddr(localsocket4->fd, &ss)){ + uint32_t addr = htonl((*((uint32_t*)&((struct sockaddr_in*)&ss)->sin_addr))); + memcpy(&request->ciaddr, &addr, 4); + } + } + + /* chaddr */ + memset(request->chaddr, 0, sizeof(request->chaddr)); + request->hlen = iface->mac_address_length > sizeof(request->chaddr) ? sizeof(request->chaddr) : iface->mac_address_length; + memcpy(request->chaddr, iface->mac_address, request->hlen); + + /* Serialize and send to the server. */ + if(!(output = tnet_dhcp_message_serialize(ctx, request))) + { + TSK_DEBUG_ERROR("Failed to serialize the DHCP message."); + goto next_iface; + } + /* Send the request to the DHCP server */ + if((ret =tnet_sockfd_sendto(localsocket4->fd, (const struct sockaddr*)&server, output->data, output->size))<0) + { + TNET_PRINT_LAST_ERROR("Failed to send DHCP request."); + + tsk_thread_sleep(150); // wait 150ms before trying the next iface. + goto next_iface; + } + /* wait for response */ + if((ret = select(localsocket4->fd+1, &set, NULL, NULL, &tv))<0) + { /* Error */ + TNET_PRINT_LAST_ERROR("select have failed."); + tsk_thread_sleep(150); // wait 150ms before trying the next iface. + goto next_iface; + } + else if(ret == 0) + { /* timeout ==> do nothing */ + } + else + { /* there is data to read */ + size_t len = 0; + void* data = 0; + + /* Check how how many bytes are pending */ + if((ret = tnet_ioctlt(localsocket4->fd, FIONREAD, &len))<0) + { + goto next_iface; + } + + /* Receive pending data */ + data = tsk_calloc(len, sizeof(uint8_t)); + if((ret = tnet_sockfd_recv(localsocket4->fd, data, len, 0))<0) + { + TSK_FREE(data); + + TNET_PRINT_LAST_ERROR("Failed to receive DHCP dgrams."); + goto next_iface; + } + + /* Parse the incoming response. */ + reply = tnet_dhcp_message_deserialize(ctx, data, len); + TSK_FREE(data); + + if(reply) + { /* response successfuly parsed */ + if(request->xid != reply->xid) + { /* Not same transaction id ==> continue*/ + TSK_OBJECT_SAFE_FREE(reply); + } + } + } + + next_iface: + TSK_OBJECT_SAFE_FREE(output); + if(reply){ + goto bail; + } + } + break;//FIXME + } + while(timeout > tsk_time_epoch()); + +bail: + TSK_OBJECT_SAFE_FREE(localsocket4); + + return reply; +} + +tnet_dhcp_reply_t* tnet_dhcp_query(tnet_dhcp_ctx_t* ctx, tnet_dhcp_message_type_t type, tnet_dhcp_params_t* params) +{ + tnet_dhcp_reply_t* reply = 0; + tnet_dhcp_request_t* request = TNET_DHCP_REQUEST_CREATE(); + + if(!ctx || !params || !request) + { + goto bail; + } + + request->type = type; + tnet_dhcp_message_add_codes(request, params->codes, params->codes_count); + + reply = tnet_dhcp_send_request(ctx, request); + +bail: + TSK_OBJECT_SAFE_FREE(request); + + return reply; +} + + +int tnet_dhcp_params_add_code(tnet_dhcp_params_t* params, tnet_dhcp_option_code_t code) +{ + if(params){ + if(params->codes_count < TNET_DHCP_MAX_CODES){ + unsigned i; + for(i=0; icodes_count; i++){ + if(params->codes[i] == code){ + return -3; + } + } + params->codes[params->codes_count++] = code; + } + else return -2; + } + return -1; +} + + + +//================================================================================================= +// [[DHCP CONTEXT]] object definition +// +static void* tnet_dhcp_ctx_create(void * self, va_list * app) +{ + tnet_dhcp_ctx_t *ctx = self; + if(ctx) + { + tnet_host_t host; + + ctx->vendor_id = tsk_strdup(TNET_DHCP_VENDOR_ID_DEFAULT); + if(!tnet_gethostname(&host)){ + ctx->hostname = tsk_strndup(host, strlen(host)); + } + ctx->timeout = TNET_DHCP_TIMEOUT_DEFAULT; + ctx->max_msg_size = TNET_DHCP_MAX_MSG_SIZE; + ctx->port_client = TNET_DHCP_CLIENT_PORT; + ctx->server_port = TNET_DHCP_SERVER_PORT; + ctx->interfaces = tnet_get_interfaces(); + + if(!ctx->interfaces || TSK_LIST_IS_EMPTY(ctx->interfaces)) + { + TSK_DEBUG_ERROR("Failed to retrieve network interfaces."); + } + + tsk_safeobj_init(ctx); + } + return self; +} + +static void* tnet_dhcp_ctx_destroy(void * self) +{ + tnet_dhcp_ctx_t *ctx = self; + if(ctx) + { + tsk_safeobj_deinit(ctx); + + TSK_FREE(ctx->vendor_id); + TSK_FREE(ctx->hostname); + + TSK_OBJECT_SAFE_FREE(ctx->interfaces); + } + return self; +} + +static const tsk_object_def_t tnet_dhcp_ctx_def_s = +{ + sizeof(tnet_dhcp_ctx_t), + tnet_dhcp_ctx_create, + tnet_dhcp_ctx_destroy, + 0, +}; +const void *tnet_dhcp_ctx_def_t = &tnet_dhcp_ctx_def_s; + +//================================================================================================= +// [[DHCP PARAMS]] object definition +// +static void* tnet_dhcp_params_create(void * self, va_list * app) +{ + tnet_dhcp_params_t *params = self; + if(params) + { + } + return self; +} + +static void* tnet_dhcp_params_destroy(void * self) +{ + tnet_dhcp_params_t *params = self; + if(params) + { + } + return self; +} + +static const tsk_object_def_t tnet_dhcp_params_def_s = +{ + sizeof(tnet_dhcp_params_t), + tnet_dhcp_params_create, + tnet_dhcp_params_destroy, + 0, +}; +const void *tnet_dhcp_params_def_t = &tnet_dhcp_params_def_s; diff --git a/trunk/tinyNET/src/dhcp/tnet_dhcp.h b/trunk/tinyNET/src/dhcp/tnet_dhcp.h index 69a88b6e..f8e122ba 100644 --- a/trunk/tinyNET/src/dhcp/tnet_dhcp.h +++ b/trunk/tinyNET/src/dhcp/tnet_dhcp.h @@ -1,105 +1,105 @@ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* 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_dhcp.h - * @brief DHCP (RFC 2131 - Dynamic Host Configuration Protocol) utilities function for P-CSCF discovery(RFC 3319 and 3361) - * Also implement: RFC 3315, 3118, 3319, 3825 (Geoconf), 4676 (Civic Addresses Configuration Information)... - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - -#ifndef TNET_DHCP_H -#define TNET_DHCP_H - -#include "tinyNET_config.h" - -#include "tnet_dhcp_message.h" - -#include "tnet_utils.h" - -#include "tsk_object.h" -#include "tsk_safeobj.h" - -TNET_BEGIN_DECLS - -#define TNET_DHCP_CTX_CREATE() tsk_object_new(tnet_dhcp_ctx_def_t) -#define TNET_DHCP_PARAMS_CREATE() tsk_object_new(tnet_dhcp_params_def_t) - -/** Default timeout (in milliseconds) value for DHCP requests. -*/ -#define TNET_DHCP_TIMEOUT_DEFAULT 2000 - -/**< Local port(client) to bind to for incoming DHCP messages as per RFC 2131 subclause 4.1. */ -#define TNET_DHCP_CLIENT_PORT 68 -/**< Destination port(Server) for outgoing DHCP messages as per RFC 2131 subclause 4.1. */ -#define TNET_DHCP_SERVER_PORT 67 - -#define TNET_DHCP_VENDOR_ID_DEFAULT "doubango/v0.0.0" -#define TNET_DHCP_MAX_CODES 20 -#define TNET_DHCP_MAX_MSG_SIZE 1500 - -/** Parameter Request List (55) -*/ -typedef struct tnet_dhcp_params_s -{ - TSK_DECLARE_OBJECT; - - tnet_dhcp_option_code_t codes[TNET_DHCP_MAX_CODES]; - unsigned codes_count; -} -tnet_dhcp_params_t; - -typedef struct tnet_dhcp_ctx_s -{ - TSK_DECLARE_OBJECT; - - char* vendor_id; - char* hostname; - uint16_t max_msg_size; /**< Option code 57. */ - - uint64_t timeout; - - tnet_port_t port_client; /**< Local port to bind to for incloming DHCP messages. Default: 68 */ - tnet_port_t server_port; /**< Destination port for outgoing DHCP messages. Default: 64 */ - tnet_interfaces_L_t *interfaces; - - TSK_DECLARE_SAFEOBJ; -} -tnet_dhcp_ctx_t; - - -TINYNET_API tnet_dhcp_reply_t* tnet_dhcp_query(tnet_dhcp_ctx_t* ctx, tnet_dhcp_message_type_t type, tnet_dhcp_params_t* params); -#define tnet_dhcp_query_discover(ctx, params) tnet_dhcp_query(ctx, dhcp_type_discover, params) -#define tnet_dhcp_query_request(ctx, params) tnet_dhcp_query(ctx, dhcp_type_request, params) -#define tnet_dhcp_query_decline(ctx, params) tnet_dhcp_query(ctx, dhcp_type_decline, params) -#define tnet_dhcp_query_release(ctx, params) tnet_dhcp_query(ctx, dhcp_type_release, params) -#define tnet_dhcp_query_inform(ctx, params) tnet_dhcp_query(ctx, dhcp_type_inform, params) - -TINYNET_API int tnet_dhcp_params_add_code(tnet_dhcp_params_t* params, tnet_dhcp_option_code_t code); - -TINYNET_GEXTERN const void *tnet_dhcp_ctx_def_t; -TINYNET_GEXTERN const void *tnet_dhcp_params_def_t; - -TNET_END_DECLS - -#endif /* TNET_DHCP_H */ +/* +* Copyright (C) 2009 Mamadou Diop. +* +* Contact: Mamadou Diop +* +* 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_dhcp.h + * @brief DHCP (RFC 2131 - Dynamic Host Configuration Protocol) utilities function for P-CSCF discovery(RFC 3319 and 3361) + * Also implement: RFC 3315, 3118, 3319, 3825 (Geoconf), 4676 (Civic Addresses Configuration Information)... + * + * @author Mamadou Diop + * + * @date Created: Sat Nov 8 16:54:58 2009 mdiop + */ + +#ifndef TNET_DHCP_H +#define TNET_DHCP_H + +#include "tinyNET_config.h" + +#include "tnet_dhcp_message.h" + +#include "tnet_utils.h" + +#include "tsk_object.h" +#include "tsk_safeobj.h" + +TNET_BEGIN_DECLS + +#define TNET_DHCP_CTX_CREATE() tsk_object_new(tnet_dhcp_ctx_def_t) +#define TNET_DHCP_PARAMS_CREATE() tsk_object_new(tnet_dhcp_params_def_t) + +/** Default timeout (in milliseconds) value for DHCP requests. +*/ +#define TNET_DHCP_TIMEOUT_DEFAULT 2000 + +/**< Local port(client) to bind to for incoming DHCP messages as per RFC 2131 subclause 4.1. */ +#define TNET_DHCP_CLIENT_PORT 68 +/**< Destination port(Server) for outgoing DHCP messages as per RFC 2131 subclause 4.1. */ +#define TNET_DHCP_SERVER_PORT 67 + +#define TNET_DHCP_VENDOR_ID_DEFAULT "doubango/v0.0.0" +#define TNET_DHCP_MAX_CODES 20 +#define TNET_DHCP_MAX_MSG_SIZE 1500 + +/** Parameter Request List (55) +*/ +typedef struct tnet_dhcp_params_s +{ + TSK_DECLARE_OBJECT; + + tnet_dhcp_option_code_t codes[TNET_DHCP_MAX_CODES]; + unsigned codes_count; +} +tnet_dhcp_params_t; + +typedef struct tnet_dhcp_ctx_s +{ + TSK_DECLARE_OBJECT; + + char* vendor_id; + char* hostname; + uint16_t max_msg_size; /**< Option code 57. */ + + uint64_t timeout; + + tnet_port_t port_client; /**< Local port to bind to for incloming DHCP messages. Default: 68 */ + tnet_port_t server_port; /**< Destination port for outgoing DHCP messages. Default: 64 */ + tnet_interfaces_L_t *interfaces; + + TSK_DECLARE_SAFEOBJ; +} +tnet_dhcp_ctx_t; + + +TINYNET_API tnet_dhcp_reply_t* tnet_dhcp_query(tnet_dhcp_ctx_t* ctx, tnet_dhcp_message_type_t type, tnet_dhcp_params_t* params); +#define tnet_dhcp_query_discover(ctx, params) tnet_dhcp_query(ctx, dhcp_type_discover, params) +#define tnet_dhcp_query_request(ctx, params) tnet_dhcp_query(ctx, dhcp_type_request, params) +#define tnet_dhcp_query_decline(ctx, params) tnet_dhcp_query(ctx, dhcp_type_decline, params) +#define tnet_dhcp_query_release(ctx, params) tnet_dhcp_query(ctx, dhcp_type_release, params) +#define tnet_dhcp_query_inform(ctx, params) tnet_dhcp_query(ctx, dhcp_type_inform, params) + +TINYNET_API int tnet_dhcp_params_add_code(tnet_dhcp_params_t* params, tnet_dhcp_option_code_t code); + +TINYNET_GEXTERN const void *tnet_dhcp_ctx_def_t; +TINYNET_GEXTERN const void *tnet_dhcp_params_def_t; + +TNET_END_DECLS + +#endif /* TNET_DHCP_H */ diff --git a/trunk/tinyNET/src/dhcp/tnet_dhcp_message.c b/trunk/tinyNET/src/dhcp/tnet_dhcp_message.c index 4e118a1b..02fe2759 100644 --- a/trunk/tinyNET/src/dhcp/tnet_dhcp_message.c +++ b/trunk/tinyNET/src/dhcp/tnet_dhcp_message.c @@ -1,303 +1,305 @@ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* 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_dhcp_message.c - * @brief DHCP Message as per RFC 2131 subclause 2. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -#include "tnet_dhcp_message.h" -#include "tnet_dhcp.h" - -#include "../tnet_utils.h" - -#include "tsk_time.h" -#include "tsk_memory.h" -#include "tsk_string.h" -#include "tsk_debug.h" - -tsk_buffer_t* tnet_dhcp_message_serialize(const struct tnet_dhcp_ctx_s *ctx, const tnet_dhcp_message_t *message) -{ - tsk_buffer_t* output = 0; - uint8_t _1byte; - uint16_t _2bytes; - uint32_t _4bytes; - - /* Check message validity */ - if(!message){ - goto bail; - } - - output = TSK_BUFFER_CREATE_NULL(); - - /*== OP HTYPE HLEN HOPS */ - _4bytes = (((uint32_t)(message->op)) << 24) | - (((uint32_t)(message->htype)) << 16) | - (((uint16_t)(message->hlen)) << 8) | message->hops; - _4bytes = ntohl(_4bytes); - tsk_buffer_append(output, &(_4bytes), 4); - - /*== XID */ - _4bytes = ntohl(message->xid); - tsk_buffer_append(output, &(_4bytes), 4); - /*== SECS */ - _2bytes = ntohs(message->secs); - tsk_buffer_append(output, &(_2bytes), 2); - /*== FLAGS */ - _2bytes = ntohs(message->flags); - tsk_buffer_append(output, &(_2bytes), 2); - /*== CIADDR */ - _4bytes = ntohl(message->ciaddr); - tsk_buffer_append(output, &(_4bytes), 4); - /*== YIADDR */ - _4bytes = ntohl(message->yiaddr); - tsk_buffer_append(output, &(_4bytes), 4); - /*== SIADDR */ - _4bytes = ntohl(message->siaddr); - tsk_buffer_append(output, &(_4bytes), 4); - /*== GIADDR */ - _4bytes = ntohl(message->giaddr); - tsk_buffer_append(output, &(_4bytes), 4); - /*== CHADDR */ - tsk_buffer_append(output, message->chaddr, sizeof(message->chaddr)); - /*== sname (unused) */ - tsk_buffer_append(output, message->sname, sizeof(message->sname)); - /*== file (unused) */ - tsk_buffer_append(output, message->file, sizeof(message->file)); - /*== Magic Cookie */ - _4bytes = ntohl(TNET_DHCP_MAGIC_COOKIE); - tsk_buffer_append(output, &(_4bytes), 4); - - /*== Message Type (option 53) - */ - tnet_dhcp_option_serializeex(dhcp_code_DHCP_Msg_Type, 1, &message->type, output); - - /*== Client Identifier (option 61) ==> RFC 2132 - 9.14. Client-identifier - Code Len Type Client-Identifier - +-----+-----+-----+-----+-----+--- - | 61 | n | t1 | i1 | i2 | ... - +-----+-----+-----+-----+-----+--- - */ - if(message->hlen){ - uint8_t client_id[17]; // 16 /*sizeof(chaddr)*/+ 1/*htype*/ - /*if(client_id)*/{ - client_id[0] = message->htype; - memcpy(&client_id[1], message->chaddr, message->hlen); - tnet_dhcp_option_serializeex(dhcp_code_Client_Id, (message->hlen+1), client_id, output); - } - } - /*== Host name(10) ==> RFC 2132 - 3.14. Host Name Option - Code Len Host Name - +-----+-----+-----+-----+-----+-----+-----+-----+-- - | 12 | n | h1 | h2 | h3 | h4 | h5 | h6 | ... - +-----+-----+-----+-----+-----+-----+-----+-----+-- - */ - if(TNET_DHCP_MESSAGE_IS_REQUEST(message) && ctx->hostname){ - tnet_dhcp_option_serializeex(dhcp_code_Hostname, strlen(ctx->hostname), ctx->hostname, output); - } - /*== Vendor classId(60) ==> RFC 2132 - 9.13. Vendor class identifier - Code Len Vendor class Identifier - +-----+-----+-----+-----+--- - | 60 | n | i1 | i2 | ... - +-----+-----+-----+-----+--- - */ - if(TNET_DHCP_MESSAGE_IS_REQUEST(message) && ctx->vendor_id){ - tnet_dhcp_option_serializeex(dhcp_code_Class_Id, strlen(ctx->vendor_id), ctx->vendor_id, output); - } - - /*== RFC 2132 - 9.10. Maximum DHCP Message Size (57) - Code Len Length - +-----+-----+-----+-----+ - | 57 | 2 | l1 | l2 | - +-----+-----+-----+-----+ - */ - if(TNET_DHCP_MESSAGE_IS_REQUEST(message) && ctx->max_msg_size){ - _2bytes = ntohs(ctx->max_msg_size); - tnet_dhcp_option_serializeex(dhcp_code_DHCP_Max_Msg_Size, 2, &_2bytes, output); - } - - /*== DHCP Options - */ - { - tsk_list_item_t *item; - tnet_dhcp_option_t* option; - tsk_list_foreach(item, message->options) - { - option = (tnet_dhcp_option_t*)item->data; - if(tnet_dhcp_option_serialize(option, output)){ - TSK_DEBUG_WARN("Failed to serialize DHCP OPTION (%u)", option->code); - } - } - } - - /* RFC 2131 - 4.1 Constructing and sending DHCP messages - The last option must always be the 'end' option. - */ - _1byte = dhcp_code_End; - tsk_buffer_append(output, &(_1byte), 1); - -bail: - return output; -} - -tnet_dhcp_message_t* tnet_dhcp_message_deserialize(const struct tnet_dhcp_ctx_s *ctx, const uint8_t *data, size_t size) -{ - tnet_dhcp_message_t *message = 0; - uint8_t *dataPtr, *dataEnd, *dataStart; - - if(!data || !size) - { - goto bail; - } - - if(size < TNET_DHCP_MESSAGE_MIN_SIZE){ - TSK_DEBUG_ERROR("DHCP message too short."); - goto bail; - } - - if(!(message = TNET_DHCP_REPLY_CREATE())){ /* If REQUEST OP will be overridedden */ - TSK_DEBUG_ERROR("Failed to create new DHCP message."); - goto bail; - } - - dataPtr = (uint8_t*)data; - dataStart = dataPtr; - dataEnd = (dataStart + size); - - /*== op (1)*/ - message->op = *(dataPtr++); - /*== htype (1) */ - message->htype = *(dataPtr++); - /*== hlen (1) */ - message->hlen = *(dataPtr++); - /*== htype (1) */ - message->hops = *(dataPtr++); - /*== xid (4) */ - message->xid= ntohl(*((uint32_t*)dataPtr)); - dataPtr += 4; - /*== secs (2) */ - message->secs = ntohs(*((uint16_t*)dataPtr)); - dataPtr += 2; - /*== flags (2) */ - message->flags = ntohs(*((uint16_t*)dataPtr)); - dataPtr += 2; - /*== ciaddr (4) */ - message->ciaddr= ntohl(*((uint32_t*)dataPtr)); - dataPtr += 4; - /*== yiaddr (4) */ - message->yiaddr= ntohl(*((uint32_t*)dataPtr)); - dataPtr += 4; - /*== siaddr (4) */ - message->siaddr= ntohl(*((uint32_t*)dataPtr)); - dataPtr += 4; - /*== giaddr (4) */ - message->giaddr= ntohl(*((uint32_t*)dataPtr)); - dataPtr += 4; - /*== chaddr (16[max]) */ - memcpy(message->chaddr, dataPtr, message->hlen>16 ? 16 : message->hlen); - dataPtr += 16; - /*== sname (64) */ - memcpy(message->sname, dataPtr, 64); - dataPtr += 64; - /*== file (128) */ - memcpy(message->file, dataPtr, 128); - dataPtr += 128; - /*== Magic Cookie (4) */ - if(ntohl(*((uint32_t*)dataPtr)) != TNET_DHCP_MAGIC_COOKIE){ - TSK_DEBUG_ERROR("Invalid DHCP magic cookie."); - // Do not exit ==> continue parsing. - } - dataPtr += 4; - - /*== options (variable) */ - while(dataPtrvalue){ - - if(option->code == dhcp_code_DHCP_Msg_Type){ - message->type = (tnet_dhcp_message_type_t)*TSK_BUFFER_TO_U8(option->value); - } - - dataPtr += option->value->size + 2/*Code Len*/; - tsk_list_push_back_data(message->options, (void**)&option); - } - else break; - } - -bail: - return message; -} - - -const tnet_dhcp_option_t* tnet_dhcp_message_find_option(const tnet_dhcp_message_t *message, tnet_dhcp_option_code_t code) -{ - tsk_list_item_t *item; - - if(!message){ - goto bail; - } - - tsk_list_foreach(item, message->options) - { - if(((tnet_dhcp_option_t*)item->data)->code == code){ - return ((tnet_dhcp_option_t*)item->data); - } - } - -bail: - return 0; -} - -int tnet_dhcp_message_add_codes(tnet_dhcp_message_t *self, tnet_dhcp_option_code_t codes[], unsigned codes_count) -{ - int ret = -1; - - if(!self){ - goto bail; - } - if(codes_count){ - unsigned i; - - tnet_dhcp_option_paramslist_t* option = (tnet_dhcp_option_paramslist_t*)tnet_dhcp_message_find_option(self, dhcp_code_Parameter_List); - if(!option){ - tnet_dhcp_option_paramslist_t *option_paramslist = TNET_DHCP_OPTION_PARAMSLIST_CREATE(); - option = option_paramslist; - tsk_list_push_back_data(self->options, (void**)&option_paramslist); - } - - for(i=0; i +* +* 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_dhcp_message.c + * @brief DHCP Message as per RFC 2131 subclause 2. + * + * @author Mamadou Diop + * + * @date Created: Sat Nov 8 16:54:58 2009 mdiop + */ +#include "tnet_dhcp_message.h" +#include "tnet_dhcp.h" + +#include "../tnet_utils.h" + +#include "tsk_time.h" +#include "tsk_memory.h" +#include "tsk_string.h" +#include "tsk_debug.h" + +#include + +tsk_buffer_t* tnet_dhcp_message_serialize(const tnet_dhcp_ctx_t *ctx, const tnet_dhcp_message_t *message) +{ + tsk_buffer_t* output = 0; + uint8_t _1byte; + uint16_t _2bytes; + uint32_t _4bytes; + + /* Check message validity */ + if(!message){ + goto bail; + } + + output = TSK_BUFFER_CREATE_NULL(); + + /*== OP HTYPE HLEN HOPS */ + _4bytes = (((uint32_t)(message->op)) << 24) | + (((uint32_t)(message->htype)) << 16) | + (((uint16_t)(message->hlen)) << 8) | message->hops; + _4bytes = ntohl(_4bytes); + tsk_buffer_append(output, &(_4bytes), 4); + + /*== XID */ + _4bytes = ntohl(message->xid); + tsk_buffer_append(output, &(_4bytes), 4); + /*== SECS */ + _2bytes = ntohs(message->secs); + tsk_buffer_append(output, &(_2bytes), 2); + /*== FLAGS */ + _2bytes = ntohs(message->flags); + tsk_buffer_append(output, &(_2bytes), 2); + /*== CIADDR */ + _4bytes = ntohl(message->ciaddr); + tsk_buffer_append(output, &(_4bytes), 4); + /*== YIADDR */ + _4bytes = ntohl(message->yiaddr); + tsk_buffer_append(output, &(_4bytes), 4); + /*== SIADDR */ + _4bytes = ntohl(message->siaddr); + tsk_buffer_append(output, &(_4bytes), 4); + /*== GIADDR */ + _4bytes = ntohl(message->giaddr); + tsk_buffer_append(output, &(_4bytes), 4); + /*== CHADDR */ + tsk_buffer_append(output, message->chaddr, sizeof(message->chaddr)); + /*== sname (unused) */ + tsk_buffer_append(output, message->sname, sizeof(message->sname)); + /*== file (unused) */ + tsk_buffer_append(output, message->file, sizeof(message->file)); + /*== Magic Cookie */ + _4bytes = ntohl(TNET_DHCP_MAGIC_COOKIE); + tsk_buffer_append(output, &(_4bytes), 4); + + /*== Message Type (option 53) + */ + tnet_dhcp_option_serializeex(dhcp_code_DHCP_Msg_Type, 1, &message->type, output); + + /*== Client Identifier (option 61) ==> RFC 2132 - 9.14. Client-identifier + Code Len Type Client-Identifier + +-----+-----+-----+-----+-----+--- + | 61 | n | t1 | i1 | i2 | ... + +-----+-----+-----+-----+-----+--- + */ + if(message->hlen){ + uint8_t client_id[17]; // 16 /*sizeof(chaddr)*/+ 1/*htype*/ + /*if(client_id)*/{ + client_id[0] = message->htype; + memcpy(&client_id[1], message->chaddr, message->hlen); + tnet_dhcp_option_serializeex(dhcp_code_Client_Id, (message->hlen+1), client_id, output); + } + } + /*== Host name(10) ==> RFC 2132 - 3.14. Host Name Option + Code Len Host Name + +-----+-----+-----+-----+-----+-----+-----+-----+-- + | 12 | n | h1 | h2 | h3 | h4 | h5 | h6 | ... + +-----+-----+-----+-----+-----+-----+-----+-----+-- + */ + if(TNET_DHCP_MESSAGE_IS_REQUEST(message) && ctx->hostname){ + tnet_dhcp_option_serializeex(dhcp_code_Hostname, strlen(ctx->hostname), ctx->hostname, output); + } + /*== Vendor classId(60) ==> RFC 2132 - 9.13. Vendor class identifier + Code Len Vendor class Identifier + +-----+-----+-----+-----+--- + | 60 | n | i1 | i2 | ... + +-----+-----+-----+-----+--- + */ + if(TNET_DHCP_MESSAGE_IS_REQUEST(message) && ctx->vendor_id){ + tnet_dhcp_option_serializeex(dhcp_code_Class_Id, strlen(ctx->vendor_id), ctx->vendor_id, output); + } + + /*== RFC 2132 - 9.10. Maximum DHCP Message Size (57) + Code Len Length + +-----+-----+-----+-----+ + | 57 | 2 | l1 | l2 | + +-----+-----+-----+-----+ + */ + if(TNET_DHCP_MESSAGE_IS_REQUEST(message) && ctx->max_msg_size){ + _2bytes = ntohs(ctx->max_msg_size); + tnet_dhcp_option_serializeex(dhcp_code_DHCP_Max_Msg_Size, 2, &_2bytes, output); + } + + /*== DHCP Options + */ + { + tsk_list_item_t *item; + tnet_dhcp_option_t* option; + tsk_list_foreach(item, message->options) + { + option = (tnet_dhcp_option_t*)item->data; + if(tnet_dhcp_option_serialize(option, output)){ + TSK_DEBUG_WARN("Failed to serialize DHCP OPTION (%u)", option->code); + } + } + } + + /* RFC 2131 - 4.1 Constructing and sending DHCP messages + The last option must always be the 'end' option. + */ + _1byte = dhcp_code_End; + tsk_buffer_append(output, &(_1byte), 1); + +bail: + return output; +} + +tnet_dhcp_message_t* tnet_dhcp_message_deserialize(const struct tnet_dhcp_ctx_s *ctx, const uint8_t *data, size_t size) +{ + tnet_dhcp_message_t *message = 0; + uint8_t *dataPtr, *dataEnd, *dataStart; + + if(!data || !size) + { + goto bail; + } + + if(size < TNET_DHCP_MESSAGE_MIN_SIZE){ + TSK_DEBUG_ERROR("DHCP message too short."); + goto bail; + } + + if(!(message = TNET_DHCP_REPLY_CREATE())){ /* If REQUEST OP will be overridedden */ + TSK_DEBUG_ERROR("Failed to create new DHCP message."); + goto bail; + } + + dataPtr = (uint8_t*)data; + dataStart = dataPtr; + dataEnd = (dataStart + size); + + /*== op (1)*/ + message->op = *(dataPtr++); + /*== htype (1) */ + message->htype = *(dataPtr++); + /*== hlen (1) */ + message->hlen = *(dataPtr++); + /*== htype (1) */ + message->hops = *(dataPtr++); + /*== xid (4) */ + message->xid= ntohl(*((uint32_t*)dataPtr)); + dataPtr += 4; + /*== secs (2) */ + message->secs = ntohs(*((uint16_t*)dataPtr)); + dataPtr += 2; + /*== flags (2) */ + message->flags = ntohs(*((uint16_t*)dataPtr)); + dataPtr += 2; + /*== ciaddr (4) */ + message->ciaddr= ntohl(*((uint32_t*)dataPtr)); + dataPtr += 4; + /*== yiaddr (4) */ + message->yiaddr= ntohl(*((uint32_t*)dataPtr)); + dataPtr += 4; + /*== siaddr (4) */ + message->siaddr= ntohl(*((uint32_t*)dataPtr)); + dataPtr += 4; + /*== giaddr (4) */ + message->giaddr= ntohl(*((uint32_t*)dataPtr)); + dataPtr += 4; + /*== chaddr (16[max]) */ + memcpy(message->chaddr, dataPtr, message->hlen>16 ? 16 : message->hlen); + dataPtr += 16; + /*== sname (64) */ + memcpy(message->sname, dataPtr, 64); + dataPtr += 64; + /*== file (128) */ + memcpy(message->file, dataPtr, 128); + dataPtr += 128; + /*== Magic Cookie (4) */ + if(ntohl(*((uint32_t*)dataPtr)) != TNET_DHCP_MAGIC_COOKIE){ + TSK_DEBUG_ERROR("Invalid DHCP magic cookie."); + // Do not exit ==> continue parsing. + } + dataPtr += 4; + + /*== options (variable) */ + while(dataPtrvalue){ + + if(option->code == dhcp_code_DHCP_Msg_Type){ + message->type = (tnet_dhcp_message_type_t)*TSK_BUFFER_TO_U8(option->value); + } + + dataPtr += option->value->size + 2/*Code Len*/; + tsk_list_push_back_data(message->options, (void**)&option); + } + else break; + } + +bail: + return message; +} + + +const tnet_dhcp_option_t* tnet_dhcp_message_find_option(const tnet_dhcp_message_t *message, tnet_dhcp_option_code_t code) +{ + tsk_list_item_t *item; + + if(!message){ + goto bail; + } + + tsk_list_foreach(item, message->options) + { + if(((tnet_dhcp_option_t*)item->data)->code == code){ + return ((tnet_dhcp_option_t*)item->data); + } + } + +bail: + return 0; +} + +int tnet_dhcp_message_add_codes(tnet_dhcp_message_t *self, tnet_dhcp_option_code_t codes[], unsigned codes_count) +{ + int ret = -1; + + if(!self){ + goto bail; + } + if(codes_count){ + unsigned i; + + tnet_dhcp_option_paramslist_t* option = (tnet_dhcp_option_paramslist_t*)tnet_dhcp_message_find_option(self, dhcp_code_Parameter_List); + if(!option){ + tnet_dhcp_option_paramslist_t *option_paramslist = TNET_DHCP_OPTION_PARAMSLIST_CREATE(); + option = option_paramslist; + tsk_list_push_back_data(self->options, (void**)&option_paramslist); + } + + for(i=0; i -* -* 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_dhcp_message.h - * @brief DHCP Message as per RFC 2131 subclause 2. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - -#ifndef TNET_DHCP_MESSAGE_H -#define TNET_DHCP_MESSAGE_H - -#include "tinyNET_config.h" - -#include "tnet_dhcp_option.h" -#include "tnet_hardwares.h" - -#include "tsk_buffer.h" - -TNET_BEGIN_DECLS - -#define TNET_DHCP_MESSAGE_CREATE(opcode) tsk_object_new(tnet_dhcp_message_def_t, (tnet_dhcp_message_op_t)opcode) -#define TNET_DHCP_REQUEST_CREATE() TNET_DHCP_MESSAGE_CREATE(dhcp_op_bootrequest) -#define TNET_DHCP_REPLY_CREATE() TNET_DHCP_MESSAGE_CREATE(dhcp_op_bootreply) - -#define TNET_DHCP_MESSAGE_IS_REQUEST(self) ((self) && ((self)->op==dhcp_op_bootrequest)) -#define TNET_DHCP_MESSAGE_IS_REPLY(self) ((self) && ((self)->op==dhcp_op_bootreply)) - -#define TNET_DHCP_MAGIC_COOKIE 0x63825363 /**< DHCP magic cookie (99, 130, 83 and 99 in decimal).*/ - -#define TNET_DHCP_MESSAGE_MIN_SIZE 223 /* Is it rigth? */ - -/** List of all supported DHCP message (see RFC 2131). -*/ -typedef enum tnet_dhcp_message_type_e -{ - /**< DHCPDISCOVER - Client broadcast to locate available servers. - */ - dhcp_type_discover = 1, - - /**< DHCPOFFER - Server to client in response to DHCPDISCOVER with - offer of configuration parameters. - */ - dhcp_type_offer = 2, - - /**< DHCPREQUEST - Client message to servers either (a) requesting - offered parameters from one server and implicitly - declining offers from all others, (b) confirming - correctness of previously allocated address after, - e.g., system reboot, or (c) extending the lease on a - particular network address. - */ - dhcp_type_request = 3, - - /**< DHCPDECLINE - Client to server indicating network address is already - in use. - */ - dhcp_type_decline = 4, - - /**< DHCPACK - Server to client with configuration parameters, - including committed network address. - */ - dhcp_type_ack = 5, - - /**< DHCPNAK - Server to client indicating client's notion of network - address is incorrect (e.g., client has moved to new - subnet) or client's lease as expired - */ - dhcp_type_nack = 6, - - /**< DHCPRELEASE - Client to server relinquishing network address and - cancelling remaining lease. - */ - dhcp_type_release = 7, - - /**< DHCPINFORM - Client to server, asking only for local configuration - parameters; client already has externally configured - network address. - */ - dhcp_type_inform = 8, -} -tnet_dhcp_message_type_t; - -/** DHCP message OP code / message type. -*/ -typedef enum tnet_dhcp_message_op_e -{ - dhcp_op_bootrequest = 1, - dhcp_op_bootreply = 2 -} -tnet_dhcp_message_op_t; - -/** BOOTP/DHCP message as per RFC 2131 subclause 2. -*/ -typedef struct tnet_dhcp_message_s -{ - TSK_DECLARE_OBJECT; - - /**< DHCP message type. Mandatory. - */ - tnet_dhcp_message_type_t type; - /* - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | op (1) | htype (1) | hlen (1) | hops (1) | - +---------------+---------------+---------------+---------------+ - | xid (4) | - +-------------------------------+-------------------------------+ - | secs (2) | flags (2) | - +-------------------------------+-------------------------------+ - | ciaddr (4) | - +---------------------------------------------------------------+ - | yiaddr (4) | - +---------------------------------------------------------------+ - | siaddr (4) | - +---------------------------------------------------------------+ - | giaddr (4) | - +---------------------------------------------------------------+ - | | - | chaddr (16) | - | | - | | - +---------------------------------------------------------------+ - | | - | sname (64) | - +---------------------------------------------------------------+ - | | - | file (128) | - +---------------------------------------------------------------+ - | | - | options (variable) | - +---------------------------------------------------------------+ - */ - - /**< Message op code / message type (1-byte). - 1 = BOOTREQUEST, 2 = BOOTREPLY - */ - tnet_dhcp_message_op_t op; - /**< Hardware address type, see ARP section in "Assigned Numbers" RFC; e.g., '1' = 10mb ethernet. - For more information see RFC 1340. - */ - tnet_hardware_type_t htype; - /**< Hardware address length (e.g. '6' for 10mb ethernet). strlen(chaddr). - */ - uint8_t hlen; - /**< Client sets to zero, optionally used by relay agents when booting via a relay agent. - */ - uint8_t hops; - /**< Transaction ID, a random number chosen by the client, used by the client - and server to associate messages and responses between a client and a server. - */ - uint32_t xid; - /**< Filled in by client, seconds elapsed since client began address acquisition or renewal process. - */ - uint16_t secs; - /**< Flags (see figure 2) - */ - uint16_t flags; - /**< Client IP address; only filled in if client is in BOUND, RENEW or REBINDING - state and can respond to ARP requests. - */ - uint32_t ciaddr; - /**< 'your' (client) IP address. - */ - uint32_t yiaddr; - /**< IP address of next server to use in bootstrap; - returned in DHCPOFFER, DHCPACK by server. - */ - uint32_t siaddr; - /**< Relay agent IP address, used in booting via a relay agent. - */ - uint32_t giaddr; - /**< Client hardware address. - */ - uint8_t chaddr[16]; - /**< Optional server host name, null terminated string. - */ - uint8_t sname[64]; - /** +* +* 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_dhcp_message.h + * @brief DHCP Message as per RFC 2131 subclause 2. + * + * @author Mamadou Diop + * + * @date Created: Sat Nov 8 16:54:58 2009 mdiop + */ + +#ifndef TNET_DHCP_MESSAGE_H +#define TNET_DHCP_MESSAGE_H + +#include "tinyNET_config.h" + +#include "tnet_dhcp_option.h" +#include "tnet_hardwares.h" + +#include "tsk_buffer.h" + +TNET_BEGIN_DECLS + +struct tnet_dhcp_ctx_s; + +#define TNET_DHCP_MESSAGE_CREATE(opcode) tsk_object_new(tnet_dhcp_message_def_t, (tnet_dhcp_message_op_t)opcode) +#define TNET_DHCP_REQUEST_CREATE() TNET_DHCP_MESSAGE_CREATE(dhcp_op_bootrequest) +#define TNET_DHCP_REPLY_CREATE() TNET_DHCP_MESSAGE_CREATE(dhcp_op_bootreply) + +#define TNET_DHCP_MESSAGE_IS_REQUEST(self) ((self) && ((self)->op==dhcp_op_bootrequest)) +#define TNET_DHCP_MESSAGE_IS_REPLY(self) ((self) && ((self)->op==dhcp_op_bootreply)) + +#define TNET_DHCP_MAGIC_COOKIE 0x63825363 /**< DHCP magic cookie (99, 130, 83 and 99 in decimal).*/ + +#define TNET_DHCP_MESSAGE_MIN_SIZE 223 /* Is it rigth? */ + +/** List of all supported DHCP message (see RFC 2131). +*/ +typedef enum tnet_dhcp_message_type_e +{ + /**< DHCPDISCOVER - Client broadcast to locate available servers. + */ + dhcp_type_discover = 1, + + /**< DHCPOFFER - Server to client in response to DHCPDISCOVER with + offer of configuration parameters. + */ + dhcp_type_offer = 2, + + /**< DHCPREQUEST - Client message to servers either (a) requesting + offered parameters from one server and implicitly + declining offers from all others, (b) confirming + correctness of previously allocated address after, + e.g., system reboot, or (c) extending the lease on a + particular network address. + */ + dhcp_type_request = 3, + + /**< DHCPDECLINE - Client to server indicating network address is already + in use. + */ + dhcp_type_decline = 4, + + /**< DHCPACK - Server to client with configuration parameters, + including committed network address. + */ + dhcp_type_ack = 5, + + /**< DHCPNAK - Server to client indicating client's notion of network + address is incorrect (e.g., client has moved to new + subnet) or client's lease as expired + */ + dhcp_type_nack = 6, + + /**< DHCPRELEASE - Client to server relinquishing network address and + cancelling remaining lease. + */ + dhcp_type_release = 7, + + /**< DHCPINFORM - Client to server, asking only for local configuration + parameters; client already has externally configured + network address. + */ + dhcp_type_inform = 8, +} +tnet_dhcp_message_type_t; + +/** DHCP message OP code / message type. +*/ +typedef enum tnet_dhcp_message_op_e +{ + dhcp_op_bootrequest = 1, + dhcp_op_bootreply = 2 +} +tnet_dhcp_message_op_t; + +/** BOOTP/DHCP message as per RFC 2131 subclause 2. +*/ +typedef struct tnet_dhcp_message_s +{ + TSK_DECLARE_OBJECT; + + /**< DHCP message type. Mandatory. + */ + tnet_dhcp_message_type_t type; + /* + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | op (1) | htype (1) | hlen (1) | hops (1) | + +---------------+---------------+---------------+---------------+ + | xid (4) | + +-------------------------------+-------------------------------+ + | secs (2) | flags (2) | + +-------------------------------+-------------------------------+ + | ciaddr (4) | + +---------------------------------------------------------------+ + | yiaddr (4) | + +---------------------------------------------------------------+ + | siaddr (4) | + +---------------------------------------------------------------+ + | giaddr (4) | + +---------------------------------------------------------------+ + | | + | chaddr (16) | + | | + | | + +---------------------------------------------------------------+ + | | + | sname (64) | + +---------------------------------------------------------------+ + | | + | file (128) | + +---------------------------------------------------------------+ + | | + | options (variable) | + +---------------------------------------------------------------+ + */ + + /**< Message op code / message type (1-byte). + 1 = BOOTREQUEST, 2 = BOOTREPLY + */ + tnet_dhcp_message_op_t op; + /**< Hardware address type, see ARP section in "Assigned Numbers" RFC; e.g., '1' = 10mb ethernet. + For more information see RFC 1340. + */ + tnet_hardware_type_t htype; + /**< Hardware address length (e.g. '6' for 10mb ethernet). strlen(chaddr). + */ + uint8_t hlen; + /**< Client sets to zero, optionally used by relay agents when booting via a relay agent. + */ + uint8_t hops; + /**< Transaction ID, a random number chosen by the client, used by the client + and server to associate messages and responses between a client and a server. + */ + uint32_t xid; + /**< Filled in by client, seconds elapsed since client began address acquisition or renewal process. + */ + uint16_t secs; + /**< Flags (see figure 2) + */ + uint16_t flags; + /**< Client IP address; only filled in if client is in BOUND, RENEW or REBINDING + state and can respond to ARP requests. + */ + uint32_t ciaddr; + /**< 'your' (client) IP address. + */ + uint32_t yiaddr; + /**< IP address of next server to use in bootstrap; + returned in DHCPOFFER, DHCPACK by server. + */ + uint32_t siaddr; + /**< Relay agent IP address, used in booting via a relay agent. + */ + uint32_t giaddr; + /**< Client hardware address. + */ + uint8_t chaddr[16]; + /**< Optional server host name, null terminated string. + */ + uint8_t sname[64]; + /** + tsk_buffer_t* tnet_dhcp6_message_serialize(const tnet_dhcp6_ctx_t *ctx, const tnet_dhcp6_message_t *self) { tsk_buffer_t* output = 0; @@ -53,7 +55,7 @@ tsk_buffer_t* tnet_dhcp6_message_serialize(const tnet_dhcp6_ctx_t *ctx, const tn /*== Vendor class */ { - _2bytes = htons(dhcp6_code_vendor_class); + _2bytes = htons(dhcp6_code_vendor_class); tsk_buffer_append(output, &(_2bytes), 2); _2bytes = htons(4 + strlen(ctx->vendor_class_data)); tsk_buffer_append(output, &(_2bytes), 2); @@ -86,38 +88,38 @@ tnet_dhcp6_message_t* tnet_dhcp6_message_deserialize(const tnet_dhcp6_ctx_t *ctx -//================================================================================================= -// [[DHCPv6 MESSAGE]] object definition -// -static void* tnet_dhcp6_message_create(void * self, va_list * app) -{ - tnet_dhcp6_message_t *message = self; - if(message) - { - static uint16_t __dhcp6message_unique_tid = 0;//(uint32_t)tsk_time_epoch(); - - message->type = va_arg(*app, tnet_dhcp6_message_type_t); - message->transaction_id = ++__dhcp6message_unique_tid; - message->options = TSK_LIST_CREATE(); - } - return self; -} - -static void* tnet_dhcp6_message_destroy(void * self) -{ - tnet_dhcp6_message_t *message = self; - if(message) - { - TSK_OBJECT_SAFE_FREE(message->options); - } - return self; -} - -static const tsk_object_def_t tnet_dhcp6_message_def_s = -{ - sizeof(tnet_dhcp6_message_t), - tnet_dhcp6_message_create, - tnet_dhcp6_message_destroy, - 0, -}; +//================================================================================================= +// [[DHCPv6 MESSAGE]] object definition +// +static void* tnet_dhcp6_message_create(void * self, va_list * app) +{ + tnet_dhcp6_message_t *message = self; + if(message) + { + static uint16_t __dhcp6message_unique_tid = 0;//(uint32_t)tsk_time_epoch(); + + message->type = va_arg(*app, tnet_dhcp6_message_type_t); + message->transaction_id = ++__dhcp6message_unique_tid; + message->options = TSK_LIST_CREATE(); + } + return self; +} + +static void* tnet_dhcp6_message_destroy(void * self) +{ + tnet_dhcp6_message_t *message = self; + if(message) + { + TSK_OBJECT_SAFE_FREE(message->options); + } + return self; +} + +static const tsk_object_def_t tnet_dhcp6_message_def_s = +{ + sizeof(tnet_dhcp6_message_t), + tnet_dhcp6_message_create, + tnet_dhcp6_message_destroy, + 0, +}; const void *tnet_dhcp6_message_def_t = &tnet_dhcp6_message_def_s; \ No newline at end of file diff --git a/trunk/tinyNET/src/dhcp6/tnet_dhcp6_message.h b/trunk/tinyNET/src/dhcp6/tnet_dhcp6_message.h index 6f27f606..0298c3e4 100644 --- a/trunk/tinyNET/src/dhcp6/tnet_dhcp6_message.h +++ b/trunk/tinyNET/src/dhcp6/tnet_dhcp6_message.h @@ -37,6 +37,8 @@ TNET_BEGIN_DECLS +struct tnet_dhcp6_ctx_s; + #define TNET_DHCP6_MESSAGE_CREATE(type) tsk_object_new(tnet_dhcp6_message_def_t, (tnet_dhcp6_message_type_t)type) #define TNET_DHCP6_REQUEST_CREATE(type) TNET_DHCP6_MESSAGE_CREATE(type) diff --git a/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.c b/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.c index 14c27fd9..7be0b52a 100644 --- a/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.c +++ b/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.c @@ -68,7 +68,7 @@ tnet_dhcp6_option_t* tnet_dhcp6_option_deserialize(const void* data, size_t size { tnet_dhcp6_option_t *option = 0; uint8_t* dataPtr = ((uint8_t*)data); - uint8_t* dataEnd = (dataPtr+size); + //uint8_t* dataEnd = (dataPtr+size); tnet_dhcp6_option_code_t code; uint16_t len; @@ -106,15 +106,15 @@ int tnet_dhcp6_option_serialize(const tnet_dhcp6_option_t* self, tsk_buffer_t *o uint16_t _2bytes; int ret = -1; - if(!self || !output){ - goto bail; - } - - /*== Code - */ - _2bytes = htons(self->code); - tsk_buffer_append(output, &(_2bytes), 2); - + if(!self || !output){ + goto bail; + } + + /*== Code + */ + _2bytes = htons(self->code); + tsk_buffer_append(output, &(_2bytes), 2); + switch(self->code) { case dhcp6_code_clientid: @@ -129,7 +129,7 @@ int tnet_dhcp6_option_serialize(const tnet_dhcp6_option_t* self, tsk_buffer_t *o if(self->data && self->data->size) { /* option-len */ - _2bytes = htons(self->data->size); + _2bytes = htons(self->data->size); tsk_buffer_append(output, &(_2bytes), 2); /* option-data */ ret = tsk_buffer_append(output, self->data->data, self->data->size); diff --git a/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.h b/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.h index 8a217469..46830875 100644 --- a/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.h +++ b/trunk/tinyNET/src/dhcp6/tnet_dhcp6_option.h @@ -176,8 +176,6 @@ typedef tnet_dhcp6_option_identifier_t tnet_dhcp6_option_serverid_t; * RFC 3315 - 22.7. Option Request Option *=======================================================================================*/ -TINYNET_API int tnet_dhcp6_option_orequest_add_code(struct tnet_dhcp6_option_orequest_s* self, uint16_t code); - /** DHCPv6 Option Request Option (subclause 22.7). */ typedef struct tnet_dhcp6_option_orequest_s @@ -197,6 +195,8 @@ typedef struct tnet_dhcp6_option_orequest_s } tnet_dhcp6_option_orequest_t; +TINYNET_API int tnet_dhcp6_option_orequest_add_code(tnet_dhcp6_option_orequest_t* self, uint16_t code); + /*====================================================================================== * RFC 3315 - 22.16. Vendor Class Option *=======================================================================================*/ diff --git a/trunk/tinyNET/src/dns/tnet_dns.c b/trunk/tinyNET/src/dns/tnet_dns.c index 9d87adbe..0a992494 100644 --- a/trunk/tinyNET/src/dns/tnet_dns.c +++ b/trunk/tinyNET/src/dns/tnet_dns.c @@ -331,7 +331,7 @@ int tnet_dns_query_naptr_srv(tnet_dns_ctx_t *ctx, const char* domain, const char TSK_OBJECT_SAFE_FREE(response); - return (hostname && !tsk_strempty(*hostname)) ? 0 : -2; + return (hostname && *hostname && !tsk_strempty(*hostname)) ? 0 : -2; } int tnet_dns_cache_maintenance(tnet_dns_ctx_t *ctx) diff --git a/trunk/tinyNET/src/stun/tnet_stun.h b/trunk/tinyNET/src/stun/tnet_stun.h index 4b9d3026..d29812e6 100644 --- a/trunk/tinyNET/src/stun/tnet_stun.h +++ b/trunk/tinyNET/src/stun/tnet_stun.h @@ -125,8 +125,8 @@ typedef struct tnet_stun_binding_s tnet_stun_attribute_mapped_addr_t *maddr; //! XORed server reflexive address (STUN2 as per RFC 5389). tnet_stun_attribute_xmapped_addr_t *xmaddr; -} -tnet_stun_binding_t; +}tnet_stun_binding_t; + TINYNET_GEXTERN const void *tnet_stun_binding_def_t; /** * @typedef tsk_list_t tnet_stun_bindings_L_t diff --git a/trunk/tinyNET/src/stun/tnet_stun_message.c b/trunk/tinyNET/src/stun/tnet_stun_message.c index d642afc2..e3215243 100644 --- a/trunk/tinyNET/src/stun/tnet_stun_message.c +++ b/trunk/tinyNET/src/stun/tnet_stun_message.c @@ -1,437 +1,439 @@ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* 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_stun_message.c - * @brief STUN2 (RFC 5389) message parser. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -#include "tnet_stun_message.h" - -#include "tnet_stun.h" - -#include "../tnet_types.h" -#include "../turn/tnet_turn_attribute.h" - -#include "tsk_memory.h" -#include "tsk_hmac.h" -#include "tsk_string.h" -#include "tsk_ppfcs32.h" - -#define SERIALIZE_N_ADD_ATTRIBUTE(ATT_NAME, payload, payload_size) \ - attribute = TNET_STUN_ATTRIBUTE_##ATT_NAME##_CREATE(payload, payload_size); \ - tnet_stun_attribute_serialize(attribute, output); \ - tnet_stun_attribute_pad(attribute, output); \ - TSK_OBJECT_SAFE_FREE(attribute); - -//int tnet_stun_message_set_type(tnet_stun_message_t *message, tnet_stun_message_type_t type) -//{ -// tnet_stun_message_t* msg = message; -// if(message) -// { -// msg->type = type; -// return 0; -// } -// return -1; -//} - -//int tnet_stun_message_set_random_transacid(tnet_stun_message_handle_t *message) -//{ -// tnet_stun_message_t* msg = message; -// if(msg) -// { -// tsk_istr_t random; -// tsk_md5digest_t digest; -// -// tsk_strrandom(&random); -// TSK_MD5_DIGEST_CALC(random, sizeof(random), digest); -// -// memcpy(msg->transaction_id, digest, TNET_STUN_TRANSACID_SIZE); -// return 0; -// } -// return -1; -//} - - - -/** - * @fn tsk_buffer_t* tnet_stun_message_serialize(const tnet_stun_message_t *self) - * - * @brief Serialize a STUN message into binary data. - * - * @author Mamadou - * @date 1/14/2010 - * - * @param [in,out] self The STUN message to serialize. - * - * @return A buffer holding the binary data (result) if serialization succeed and zero otherwise. - * It is up to the caller of this method to free the returned buffer using @ref TSK_BUFFER_SAFE_FREE. -**/ -tsk_buffer_t* tnet_stun_message_serialize(const tnet_stun_message_t *self) -{ - tsk_buffer_t *output = 0; - tnet_stun_attribute_t *attribute; - unsigned compute_integrity = self->integrity; - - if(!self) goto bail; - - output = TSK_BUFFER_CREATE_NULL(); - - /* RFC 5389 - 6. STUN Message Structure - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |0 0| STUN Message Type | Message Length | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Magic Cookie | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - | Transaction ID (96 bits) | - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - - /* STUN Message Type - */ - { - uint16_t type = htons(self->type); - tsk_buffer_append(output, &(type), 2); - } - - /* Message Length ==> Will be updated after attributes have been added. */ - { - uint16_t length = 0; - tsk_buffer_append(output, &(length), 2); - } - - /* Magic Cookie - */ - { - uint32_t cookie = htonl(self->cookie); - tsk_buffer_append(output, &(cookie), 4); - } - - - /* Transaction ID (96 bits==>16bytes) - */ - tsk_buffer_append(output, self->transaction_id, TNET_STUN_TRANSACID_SIZE); - - /* DONT-FRAGMENT - */ - if(self->dontfrag) - { - attribute = TNET_TURN_ATTRIBUTE_DONTFRAG_CREATE(); - tnet_stun_attribute_serialize(attribute, output); - TSK_OBJECT_SAFE_FREE(attribute); - } - - /*=== Attributes === - */ - { - tsk_list_item_t *item; - tsk_list_foreach(item, self->attributes) - { - attribute = item->data; - tnet_stun_attribute_serialize(attribute, output); - tnet_stun_attribute_pad(attribute, output); - } - } - - /* AUTHENTICATION */ - if(self->realm && self->nonce) - { - SERIALIZE_N_ADD_ATTRIBUTE(USERNAME, self->username, strlen(self->username)); - SERIALIZE_N_ADD_ATTRIBUTE(REALM, self->realm, strlen(self->realm)); - SERIALIZE_N_ADD_ATTRIBUTE(NONCE, self->nonce, strlen(self->nonce)); - - compute_integrity = 1; - } - - /* Message Length: The message length MUST contain the size, in bytes, of the message - not including the 20-byte STUN header. - */ - { - uint16_t length = (output->size) - TNET_STUN_HEADER_SIZE; - if(self->fingerprint) - length += (2/* Type */ + 2 /* Length */+ 4 /* FINGERPRINT VALUE*/); - - if(compute_integrity) - length += (2/* Type */ + 2 /* Length */+ TSK_SHA1_DIGEST_SIZE /* INTEGRITY VALUE*/); - - *(((uint16_t*)output->data)+1) = htons(length); - } - - /* MESSAGE-INTEGRITY */ - if(compute_integrity) - { - /* RFC 5389 - 15.4. MESSAGE-INTEGRITY - The MESSAGE-INTEGRITY attribute contains an HMAC-SHA1 [RFC2104] of the STUN message. - - For long-term credentials ==> key = MD5(username ":" realm ":" SASLprep(password)) - For short-term credentials ==> key = SASLprep(password) - FIXME: what about short term credentials? - FIXME: what about SASLprep - */ - char* keystr = 0; - tsk_sha1digest_t hmac; - tsk_md5digest_t md5; - - tsk_sprintf(&keystr, "%s:%s:%s", self->username, self->realm, self->password); - TSK_MD5_DIGEST_CALC(keystr, strlen(keystr), md5); - hmac_sha1digest_compute(output->data, output->size, (const char*)md5, TSK_MD5_DIGEST_SIZE, hmac); - - SERIALIZE_N_ADD_ATTRIBUTE(INTEGRITY, hmac, TSK_SHA1_DIGEST_SIZE); - - TSK_FREE(keystr); - } - - /* FINGERPRINT */ - if(self->fingerprint) - { - /* RFC 5389 - 15.5. FINGERPRINT - The FINGERPRINT attribute MAY be present in all STUN messages. The - value of the attribute is computed as the CRC-32 of the STUN message - up to (but excluding) the FINGERPRINT attribute itself, XOR'ed with - the 32-bit value 0x5354554e - */ - uint32_t fingerprint = tsk_pppfcs32(TSK_PPPINITFCS32, output->data, output->size); - fingerprint ^= 0x5354554e; - fingerprint = htonl(fingerprint); - - attribute = TNET_STUN_ATTRIBUTE_FINGERPRINT_CREATE(fingerprint); - tnet_stun_attribute_serialize(attribute, output); - TSK_OBJECT_SAFE_FREE(attribute); - } - -bail: - return output; -} - - -/** - * @fn tnet_stun_message_t message* tnet_stun_message_deserialize(const uint8_t *data, - * size_t size) - * - * @brief Deserialize a STUN message from binary data. - * - * @author Mamadou - * @date 1/14/2010 - * - * @param [in,out] data A pointer to the binary data. - * @param size The size of the binary data. - * - * @return A STUN message if deserialization succeed and zero otherwise. -**/ -tnet_stun_message_t* tnet_stun_message_deserialize(const uint8_t *data, size_t size) -{ - tnet_stun_message_t *message = 0; - uint8_t* dataPtr, *dataEnd; - - - if(!data || (size < TNET_STUN_HEADER_SIZE) || !TNET_IS_STUN2(data)) - { - goto bail; - } - - dataPtr = (uint8_t*)data; - dataEnd = (dataPtr + size); - - message = TNET_STUN_MESSAGE_CREATE_NULL(); - - /* Message Type - */ - message->type = (tnet_stun_message_type_t)ntohs(*((uint16_t*)dataPtr)); - dataPtr += 2; - - /* Message Length - */ - message->length = ntohs(*((uint16_t*)dataPtr)); - dataPtr += 2; - - /* Check message validity - */ - if((message->length + TNET_STUN_HEADER_SIZE) != size) - { - TSK_OBJECT_SAFE_FREE(message); - goto bail; - } - - /* Magic Cookie - ==> already set by the constructor and checked by @ref TNET_IS_STUN2 - */ - dataPtr += 4; - - /* Transaction ID - */ - memcpy(message->transaction_id, dataPtr, TNET_STUN_TRANSACID_SIZE); - dataPtr += TNET_STUN_TRANSACID_SIZE; - - /* == Parse attributes - */ - while(dataPtr < dataEnd) - { - tnet_stun_attribute_t *attribute = tnet_stun_attribute_deserialize(dataPtr, (dataEnd - dataPtr)); - if(attribute) - { - size_t att_size = (attribute->length + 2 /* Type*/ + 2/* Length */); - att_size += (att_size%4) ? 4-(att_size%4) : 0; // Skip zero bytes used to pad the attribute. - - dataPtr += att_size; - tsk_list_push_back_data(message->attributes, (void**)&attribute); - - continue; - } - else continue; - - - - - } - - -bail: - return message; -} - -int tnet_stun_message_add_attribute(tnet_stun_message_t *self, tnet_stun_attribute_t** attribute) -{ - //if(self && attribute) - { - tsk_list_push_back_data(self->attributes, (void**)attribute); - return 0; - } - return -1; -} - -const tnet_stun_attribute_t* tnet_stun_message_get_attribute(const tnet_stun_message_t *self, tnet_stun_attribute_type_t type) -{ - tnet_stun_attribute_t* attribute; - - if(self && !TSK_LIST_IS_EMPTY(self->attributes)) - { - tsk_list_item_t *item; - tsk_list_foreach(item, self->attributes) - { - if((attribute = item->data) && attribute->type == type) - { - return attribute; - } - } - } - return 0; -} - -short tnet_stun_message_get_errorcode(const tnet_stun_message_t *self) -{ - const tnet_stun_attribute_errorcode_t* error = (const tnet_stun_attribute_errorcode_t*)tnet_stun_message_get_attribute(self, stun_error_code); - if(error) - { - return ((error->_class*100) + error->number); - } - return -1; -} - -const char* tnet_stun_message_get_realm(const tnet_stun_message_t *self) -{ - const tnet_stun_attribute_realm_t* realm = (const tnet_stun_attribute_realm_t*)tnet_stun_message_get_attribute(self, stun_realm); - if(realm) - { - return realm->value; - } - return 0; -} - -const char* tnet_stun_message_get_nonce(const tnet_stun_message_t *self) -{ - const tnet_stun_attribute_nonce_t* nonce = (const tnet_stun_attribute_nonce_t*)tnet_stun_message_get_attribute(self, stun_nonce); - if(nonce) - { - return nonce->value; - } - return 0; -} - -int32_t tnet_stun_message_get_lifetime(const tnet_stun_message_t *self) -{ - const tnet_turn_attribute_lifetime_t* lifetime = (const tnet_turn_attribute_lifetime_t*)tnet_stun_message_get_attribute(self, stun_lifetime); - if(lifetime) - { - return lifetime->value; - } - return -1; -} - - - - - - - - - -//================================================================================================= -// STUN2 MESSAGE object definition -// -static void* tnet_stun_message_create(void * self, va_list * app) -{ - tnet_stun_message_t *message = self; - if(message) - { - message->username = tsk_strdup(va_arg(*app, const char*)); - message->password = tsk_strdup(va_arg(*app, const char*)); - - message->cookie = TNET_STUN_MAGIC_COOKIE; - message->attributes = TSK_LIST_CREATE(); - - message->fingerprint = 1; - message->integrity = 0; - } - return self; -} - -static void* tnet_stun_message_destroy(void * self) -{ - tnet_stun_message_t *message = self; - if(message) - { - TSK_FREE(message->username); - TSK_FREE(message->password); - TSK_FREE(message->realm); - TSK_FREE(message->nonce); - - TSK_OBJECT_SAFE_FREE(message->attributes); - } - - return self; -} - -static const tsk_object_def_t tnet_stun_message_def_s = -{ - sizeof(tnet_stun_message_t), - tnet_stun_message_create, - tnet_stun_message_destroy, - 0, -}; -const void *tnet_stun_message_def_t = &tnet_stun_message_def_s; - +/* +* Copyright (C) 2009 Mamadou Diop. +* +* Contact: Mamadou Diop +* +* 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_stun_message.c + * @brief STUN2 (RFC 5389) message parser. + * + * @author Mamadou Diop + * + * @date Created: Sat Nov 8 16:54:58 2009 mdiop + */ +#include "tnet_stun_message.h" + +#include "tnet_stun.h" + +#include "../tnet_types.h" +#include "../turn/tnet_turn_attribute.h" + +#include "tsk_memory.h" +#include "tsk_hmac.h" +#include "tsk_string.h" +#include "tsk_ppfcs32.h" + +#include + +#define SERIALIZE_N_ADD_ATTRIBUTE(ATT_NAME, payload, payload_size) \ + attribute = TNET_STUN_ATTRIBUTE_##ATT_NAME##_CREATE(payload, payload_size); \ + tnet_stun_attribute_serialize(attribute, output); \ + tnet_stun_attribute_pad(attribute, output); \ + TSK_OBJECT_SAFE_FREE(attribute); + +//int tnet_stun_message_set_type(tnet_stun_message_t *message, tnet_stun_message_type_t type) +//{ +// tnet_stun_message_t* msg = message; +// if(message) +// { +// msg->type = type; +// return 0; +// } +// return -1; +//} + +//int tnet_stun_message_set_random_transacid(tnet_stun_message_handle_t *message) +//{ +// tnet_stun_message_t* msg = message; +// if(msg) +// { +// tsk_istr_t random; +// tsk_md5digest_t digest; +// +// tsk_strrandom(&random); +// TSK_MD5_DIGEST_CALC(random, sizeof(random), digest); +// +// memcpy(msg->transaction_id, digest, TNET_STUN_TRANSACID_SIZE); +// return 0; +// } +// return -1; +//} + + + +/** + * @fn tsk_buffer_t* tnet_stun_message_serialize(const tnet_stun_message_t *self) + * + * @brief Serialize a STUN message into binary data. + * + * @author Mamadou + * @date 1/14/2010 + * + * @param [in,out] self The STUN message to serialize. + * + * @return A buffer holding the binary data (result) if serialization succeed and zero otherwise. + * It is up to the caller of this method to free the returned buffer using @ref TSK_BUFFER_SAFE_FREE. +**/ +tsk_buffer_t* tnet_stun_message_serialize(const tnet_stun_message_t *self) +{ + tsk_buffer_t *output = 0; + tnet_stun_attribute_t *attribute; + unsigned compute_integrity = self->integrity; + + if(!self) goto bail; + + output = TSK_BUFFER_CREATE_NULL(); + + /* RFC 5389 - 6. STUN Message Structure + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0 0| STUN Message Type | Message Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Magic Cookie | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + | Transaction ID (96 bits) | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ + + /* STUN Message Type + */ + { + uint16_t type = htons(self->type); + tsk_buffer_append(output, &(type), 2); + } + + /* Message Length ==> Will be updated after attributes have been added. */ + { + uint16_t length = 0; + tsk_buffer_append(output, &(length), 2); + } + + /* Magic Cookie + */ + { + uint32_t cookie = htonl(self->cookie); + tsk_buffer_append(output, &(cookie), 4); + } + + + /* Transaction ID (96 bits==>16bytes) + */ + tsk_buffer_append(output, self->transaction_id, TNET_STUN_TRANSACID_SIZE); + + /* DONT-FRAGMENT + */ + if(self->dontfrag) + { + attribute = TNET_TURN_ATTRIBUTE_DONTFRAG_CREATE(); + tnet_stun_attribute_serialize(attribute, output); + TSK_OBJECT_SAFE_FREE(attribute); + } + + /*=== Attributes === + */ + { + tsk_list_item_t *item; + tsk_list_foreach(item, self->attributes) + { + attribute = item->data; + tnet_stun_attribute_serialize(attribute, output); + tnet_stun_attribute_pad(attribute, output); + } + } + + /* AUTHENTICATION */ + if(self->realm && self->nonce) + { + SERIALIZE_N_ADD_ATTRIBUTE(USERNAME, self->username, strlen(self->username)); + SERIALIZE_N_ADD_ATTRIBUTE(REALM, self->realm, strlen(self->realm)); + SERIALIZE_N_ADD_ATTRIBUTE(NONCE, self->nonce, strlen(self->nonce)); + + compute_integrity = 1; + } + + /* Message Length: The message length MUST contain the size, in bytes, of the message + not including the 20-byte STUN header. + */ + { + uint16_t length = (output->size) - TNET_STUN_HEADER_SIZE; + if(self->fingerprint) + length += (2/* Type */ + 2 /* Length */+ 4 /* FINGERPRINT VALUE*/); + + if(compute_integrity) + length += (2/* Type */ + 2 /* Length */+ TSK_SHA1_DIGEST_SIZE /* INTEGRITY VALUE*/); + + *(((uint16_t*)output->data)+1) = htons(length); + } + + /* MESSAGE-INTEGRITY */ + if(compute_integrity) + { + /* RFC 5389 - 15.4. MESSAGE-INTEGRITY + The MESSAGE-INTEGRITY attribute contains an HMAC-SHA1 [RFC2104] of the STUN message. + + For long-term credentials ==> key = MD5(username ":" realm ":" SASLprep(password)) + For short-term credentials ==> key = SASLprep(password) + FIXME: what about short term credentials? + FIXME: what about SASLprep + */ + char* keystr = 0; + tsk_sha1digest_t hmac; + tsk_md5digest_t md5; + + tsk_sprintf(&keystr, "%s:%s:%s", self->username, self->realm, self->password); + TSK_MD5_DIGEST_CALC(keystr, strlen(keystr), md5); + hmac_sha1digest_compute(output->data, output->size, (const char*)md5, TSK_MD5_DIGEST_SIZE, hmac); + + SERIALIZE_N_ADD_ATTRIBUTE(INTEGRITY, hmac, TSK_SHA1_DIGEST_SIZE); + + TSK_FREE(keystr); + } + + /* FINGERPRINT */ + if(self->fingerprint) + { + /* RFC 5389 - 15.5. FINGERPRINT + The FINGERPRINT attribute MAY be present in all STUN messages. The + value of the attribute is computed as the CRC-32 of the STUN message + up to (but excluding) the FINGERPRINT attribute itself, XOR'ed with + the 32-bit value 0x5354554e + */ + uint32_t fingerprint = tsk_pppfcs32(TSK_PPPINITFCS32, output->data, output->size); + fingerprint ^= 0x5354554e; + fingerprint = htonl(fingerprint); + + attribute = TNET_STUN_ATTRIBUTE_FINGERPRINT_CREATE(fingerprint); + tnet_stun_attribute_serialize(attribute, output); + TSK_OBJECT_SAFE_FREE(attribute); + } + +bail: + return output; +} + + +/** + * @fn tnet_stun_message_t message* tnet_stun_message_deserialize(const uint8_t *data, + * size_t size) + * + * @brief Deserialize a STUN message from binary data. + * + * @author Mamadou + * @date 1/14/2010 + * + * @param [in,out] data A pointer to the binary data. + * @param size The size of the binary data. + * + * @return A STUN message if deserialization succeed and zero otherwise. +**/ +tnet_stun_message_t* tnet_stun_message_deserialize(const uint8_t *data, size_t size) +{ + tnet_stun_message_t *message = 0; + uint8_t* dataPtr, *dataEnd; + + + if(!data || (size < TNET_STUN_HEADER_SIZE) || !TNET_IS_STUN2(data)) + { + goto bail; + } + + dataPtr = (uint8_t*)data; + dataEnd = (dataPtr + size); + + message = TNET_STUN_MESSAGE_CREATE_NULL(); + + /* Message Type + */ + message->type = (tnet_stun_message_type_t)ntohs(*((uint16_t*)dataPtr)); + dataPtr += 2; + + /* Message Length + */ + message->length = ntohs(*((uint16_t*)dataPtr)); + dataPtr += 2; + + /* Check message validity + */ + if((message->length + TNET_STUN_HEADER_SIZE) != size) + { + TSK_OBJECT_SAFE_FREE(message); + goto bail; + } + + /* Magic Cookie + ==> already set by the constructor and checked by @ref TNET_IS_STUN2 + */ + dataPtr += 4; + + /* Transaction ID + */ + memcpy(message->transaction_id, dataPtr, TNET_STUN_TRANSACID_SIZE); + dataPtr += TNET_STUN_TRANSACID_SIZE; + + /* == Parse attributes + */ + while(dataPtr < dataEnd) + { + tnet_stun_attribute_t *attribute = tnet_stun_attribute_deserialize(dataPtr, (dataEnd - dataPtr)); + if(attribute) + { + size_t att_size = (attribute->length + 2 /* Type*/ + 2/* Length */); + att_size += (att_size%4) ? 4-(att_size%4) : 0; // Skip zero bytes used to pad the attribute. + + dataPtr += att_size; + tsk_list_push_back_data(message->attributes, (void**)&attribute); + + continue; + } + else continue; + + + + + } + + +bail: + return message; +} + +int tnet_stun_message_add_attribute(tnet_stun_message_t *self, tnet_stun_attribute_t** attribute) +{ + //if(self && attribute) + { + tsk_list_push_back_data(self->attributes, (void**)attribute); + return 0; + } + return -1; +} + +const tnet_stun_attribute_t* tnet_stun_message_get_attribute(const tnet_stun_message_t *self, tnet_stun_attribute_type_t type) +{ + tnet_stun_attribute_t* attribute; + + if(self && !TSK_LIST_IS_EMPTY(self->attributes)) + { + tsk_list_item_t *item; + tsk_list_foreach(item, self->attributes) + { + if((attribute = item->data) && attribute->type == type) + { + return attribute; + } + } + } + return 0; +} + +short tnet_stun_message_get_errorcode(const tnet_stun_message_t *self) +{ + const tnet_stun_attribute_errorcode_t* error = (const tnet_stun_attribute_errorcode_t*)tnet_stun_message_get_attribute(self, stun_error_code); + if(error) + { + return ((error->_class*100) + error->number); + } + return -1; +} + +const char* tnet_stun_message_get_realm(const tnet_stun_message_t *self) +{ + const tnet_stun_attribute_realm_t* realm = (const tnet_stun_attribute_realm_t*)tnet_stun_message_get_attribute(self, stun_realm); + if(realm) + { + return realm->value; + } + return 0; +} + +const char* tnet_stun_message_get_nonce(const tnet_stun_message_t *self) +{ + const tnet_stun_attribute_nonce_t* nonce = (const tnet_stun_attribute_nonce_t*)tnet_stun_message_get_attribute(self, stun_nonce); + if(nonce) + { + return nonce->value; + } + return 0; +} + +int32_t tnet_stun_message_get_lifetime(const tnet_stun_message_t *self) +{ + const tnet_turn_attribute_lifetime_t* lifetime = (const tnet_turn_attribute_lifetime_t*)tnet_stun_message_get_attribute(self, stun_lifetime); + if(lifetime) + { + return lifetime->value; + } + return -1; +} + + + + + + + + + +//================================================================================================= +// STUN2 MESSAGE object definition +// +static void* tnet_stun_message_create(void * self, va_list * app) +{ + tnet_stun_message_t *message = self; + if(message) + { + message->username = tsk_strdup(va_arg(*app, const char*)); + message->password = tsk_strdup(va_arg(*app, const char*)); + + message->cookie = TNET_STUN_MAGIC_COOKIE; + message->attributes = TSK_LIST_CREATE(); + + message->fingerprint = 1; + message->integrity = 0; + } + return self; +} + +static void* tnet_stun_message_destroy(void * self) +{ + tnet_stun_message_t *message = self; + if(message) + { + TSK_FREE(message->username); + TSK_FREE(message->password); + TSK_FREE(message->realm); + TSK_FREE(message->nonce); + + TSK_OBJECT_SAFE_FREE(message->attributes); + } + + return self; +} + +static const tsk_object_def_t tnet_stun_message_def_s = +{ + sizeof(tnet_stun_message_t), + tnet_stun_message_create, + tnet_stun_message_destroy, + 0, +}; +const void *tnet_stun_message_def_t = &tnet_stun_message_def_s; + diff --git a/trunk/tinyNET/src/tinyNET_config.h b/trunk/tinyNET/src/tinyNET_config.h index 5c223a03..f2ad6858 100644 --- a/trunk/tinyNET/src/tinyNET_config.h +++ b/trunk/tinyNET/src/tinyNET_config.h @@ -1,114 +1,116 @@ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* 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 tinyNET_config.h - * @brief Global configuration file. - * - * This file incude all your preferences or configuration. All specific configuration - * must be defined in this file. You must include this file in all your header files. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - -#ifndef _TINYNET_H_ -#define _TINYNET_H_ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#ifdef __SYMBIAN32__ -#undef _WIN32 /* Because of WINSCW */ -#endif - -/* Windows (XP/Vista/7/CE and Windows Mobile) macro definition. -*/ -#if defined(WIN32)|| defined(_WIN32) || defined(_WIN32_WCE) -# define TNET_UNDER_WINDOWS 1 -#endif - -/**@def TINYNET_API -* Used on Windows and Sysbian systems to export public functions. -*/ -#if !defined(__GNUC__) && defined(TINYNET_EXPORTS) -# define TINYNET_API __declspec(dllexport) -# define TINYNET_GEXTERN __declspec(dllexport) -#elif !defined(__GNUC__) /*&& defined(TINYNET_IMPORTS)*/ -# define TINYNET_API __declspec(dllimport) -# define TINYNET_GEXTERN __declspec(dllimport) -#else -# define TINYNET_API -# define TINYNET_GEXTERN extern -#endif - -/* Guards against C++ name mangling -*/ -#ifdef __cplusplus -# define TNET_BEGIN_DECLS extern "C" { -# define TNET_END_DECLS } -#else -# define TNET_BEGIN_DECLS -# define TNET_END_DECLS -#endif - -/* Disable some well-known warnings -*/ -#ifdef _MSC_VER -# define _CRT_SECURE_NO_WARNINGS -# pragma warning( disable : 4996 ) -#endif - -#if (_WIN32_WINNT>=0x0600) || (ANDROID) || defined (__APPLE__) -# define TNET_HAVE_POLL 1 -#else -# define TNET_HAVE_POLL 0 -#endif - -#if TNET_UNDER_WINDOWS -# define TNET_USE_POLL 0 /* Do not use WSAPoll event if under Vista. */ -#else -# define TNET_USE_POLL 1 -#endif - -#if defined(__APPLE__) /*|| defined(__SYMBIAN32__)*/ -# define TNET_HAVE_SS_LEN 1 -#else -# define TNET_HAVE_SS_LEN 0 -#endif - -#if 0 /* __APPLE__? */ -# define HAVE_IFADDRS_H 1 -#else -# define HAVE_IFADDRS_H 0 -#endif - -/* Used in TURN/STUN2 attributes. -*/ -#define TNET_SOFTWARE "IM-client/OMA1.0 doubango/v0.0.0" - -#include - -#endif /* _TINYNET_H_ */ - - +/* +* Copyright (C) 2009 Mamadou Diop. +* +* Contact: Mamadou Diop +* +* 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 tinyNET_config.h + * @brief Global configuration file. + * + * This file incude all your preferences or configuration. All specific configuration + * must be defined in this file. You must include this file in all your header files. + * + * @author Mamadou Diop + * + * @date Created: Sat Nov 8 16:54:58 2009 mdiop + */ + +#ifndef _TINYNET_H_ +#define _TINYNET_H_ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef __SYMBIAN32__ +#undef _WIN32 /* Because of WINSCW */ +#endif + +/* Windows (XP/Vista/7/CE and Windows Mobile) macro definition. +*/ +#if defined(WIN32)|| defined(_WIN32) || defined(_WIN32_WCE) +# define TNET_UNDER_WINDOWS 1 +#endif + +/**@def TINYNET_API +* Used on Windows and Sysbian systems to export public functions. +*/ +#if !defined(__GNUC__) && defined(TINYNET_EXPORTS) +# define TINYNET_API __declspec(dllexport) +# define TINYNET_GEXTERN __declspec(dllexport) +#elif !defined(__GNUC__) /*&& defined(TINYNET_IMPORTS)*/ +# define TINYNET_API __declspec(dllimport) +# define TINYNET_GEXTERN __declspec(dllimport) +#else +# define TINYNET_API +# define TINYNET_GEXTERN extern +#endif + +/* Guards against C++ name mangling +*/ +#ifdef __cplusplus +# define TNET_BEGIN_DECLS extern "C" { +# define TNET_END_DECLS } +#else +# define TNET_BEGIN_DECLS +# define TNET_END_DECLS +#endif + +/* Disable some well-known warnings +*/ +#ifdef _MSC_VER +# define _CRT_SECURE_NO_WARNINGS +# pragma warning( disable : 4996 ) +#endif + +#if (_WIN32_WINNT>=0x0600) || (ANDROID) || defined (__APPLE__) +# define TNET_HAVE_POLL 1 +#else +# define TNET_HAVE_POLL 0 +#endif + +#if TNET_UNDER_WINDOWS +# define TNET_USE_POLL 0 /* Do not use WSAPoll event if under Vista. */ +#else +# define TNET_USE_POLL 1 +#endif + +#if defined(__APPLE__) /*|| defined(__SYMBIAN32__)*/ +# define TNET_HAVE_SS_LEN 1 +# define TNET_HAVE_SA_LEN 1 +#else +# define TNET_HAVE_SS_LEN 0 +# define TNET_HAVE_SA_LEN 0 +#endif + +#if defined(__APPLE__) +# define HAVE_IFADDRS 1 +#else +# define HAVE_IFADDRS 0 /* Windows, ANDROID */ +#endif + +/* Used in TURN/STUN2 attributes. +*/ +#define TNET_SOFTWARE "IM-client/OMA1.0 doubango/v0.0.0" + +#include + +#endif /* _TINYNET_H_ */ + + diff --git a/trunk/tinyNET/src/tnet_types.h b/trunk/tinyNET/src/tnet_types.h index 2fbf800e..f015678a 100644 --- a/trunk/tinyNET/src/tnet_types.h +++ b/trunk/tinyNET/src/tnet_types.h @@ -46,10 +46,9 @@ # include # include # include -# if HAVE_IFADDRS_H +# include +# if HAVE_IFADDRS # include -# else -# include # endif # if TNET_HAVE_POLL # include @@ -96,4 +95,4 @@ TNET_END_DECLS #endif /* TNET_TYPES_H */ - + diff --git a/trunk/tinyNET/src/tnet_utils.c b/trunk/tinyNET/src/tnet_utils.c index c63ec551..3a5bb2d4 100644 --- a/trunk/tinyNET/src/tnet_utils.c +++ b/trunk/tinyNET/src/tnet_utils.c @@ -153,19 +153,60 @@ tnet_interfaces_L_t* tnet_get_interfaces() #undef FREE -#elif HAVE_IFADDRS_H /*=== Using getifaddrs ===*/ - +#elif HAVE_IFADDRS /*=== Using getifaddrs ===*/ // see http://www.kernel.org/doc/man-pages/online/pages/man3/getifaddrs.3.html - struct ifaddrs *ifaddr, *ifa; + struct ifaddrs *ifaddr = 0, *ifa = 0; /* Get interfaces */ - //if(getifaddrs(&ifaddr) == -1) + if(getifaddrs(&ifaddr) == -1) { TSK_DEBUG_ERROR("getifaddrs failed and errno= [%d]", tnet_geterrno()); goto bail; } - + + for(ifa = ifaddr; ifa; ifa = ifa->ifa_next) + { + if(ifa->ifa_addr->sa_family != AF_LINK){ + continue; + } + +#ifdef __linux__ + { + struct ifreq ifr; + tnet_fd_t fd = TNET_INVALID_FD; + + if((fd = socket(AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP)) < 0){ + TSK_DEBUG_ERROR("Failed to create new DGRAM socket and errno= [%d]", tnet_geterrno()); + goto next; + } + + ifr.ifr_addr.sa_family = ifa->ifa_addr->sa_family; + strcpy(ifr.ifr_name, ifa.ifa_name); + if(tnet_ioctl(fd, SIOCGIFHWADDR, &ifr)<0){ + TSK_DEBUG_ERROR("tnet_ioctl(SIOCGIFHWADDR)", tnet_geterrno()); + goto next; + } + else{ + //sockaddr_dl* sdl = (struct sockaddr_dl *)ifa->ifa_addr; + tnet_interface_t *iface = TNET_INTERFACE_CREATE(ifr->ifr_name, ifr->ifr_hwaddr.sa_data, 6); + tsk_list_push_back_data(ifaces, (void**)&(iface)); + } + next: + tnet_sockfd_close(&fd); + } +#else + { + //struct sockaddr_dl* sdl = (struct sockaddr_dl*)ifa->ifa_addr; + tnet_interface_t *iface = TNET_INTERFACE_CREATE(ifa->ifa_name, ifa->ifa_addr, 6); + iface->index = if_nametoindex(ifa->ifa_name); + tsk_list_push_back_data(ifaces, (void**)&(iface)); + } +#endif + + }/* for */ + + freeifaddrs(ifaddr); #else /*=== ANDROID,... --> Using SIOCGIFCONF and SIOCGIFHWADDR ===*/ @@ -176,7 +217,7 @@ tnet_interfaces_L_t* tnet_get_interfaces() struct sockaddr_in *sin; struct ifreq *ifr; - if((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) + if((fd = socket(AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP)) < 0) { TSK_DEBUG_ERROR("Failed to create new DGRAM socket and errno= [%d]", tnet_geterrno()); goto done; @@ -524,34 +565,34 @@ int tnet_gethostname(tnet_host_t* result) return gethostname(*result, sizeof(*result)); } -int tnet_sockfd_joingroup6(tnet_fd_t fd, const char* multiaddr, unsigned iface_index) -{ - int ret = -1; - //struct ipv6_mreq mreq6; - //struct sockaddr_storage ss; - - //if((ret = tnet_sockaddr_init(multiaddr, 0, tnet_socket_type_udp_ipv6, &ss))) - //{ - // return ret; - //} - - //memcpy(&mreq6.ipv6mr_multiaddr, &((struct sockaddr_in6 *) &ss)->sin6_addr, sizeof(struct in6_addr)); - //mreq6.ipv6mr_interface = iface_index; - - //if((ret = setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, (const char*)&mreq6, sizeof(mreq6)))) - //{ - // TNET_PRINT_LAST_ERROR("Failed to join IPv6 multicast group."); - // return ret; - //} - - return ret; -} - +int tnet_sockfd_joingroup6(tnet_fd_t fd, const char* multiaddr, unsigned iface_index) +{ + int ret = -1; + //struct ipv6_mreq mreq6; + //struct sockaddr_storage ss; + + //if((ret = tnet_sockaddr_init(multiaddr, 0, tnet_socket_type_udp_ipv6, &ss))) + //{ + // return ret; + //} + + //memcpy(&mreq6.ipv6mr_multiaddr, &((struct sockaddr_in6 *) &ss)->sin6_addr, sizeof(struct in6_addr)); + //mreq6.ipv6mr_interface = iface_index; + + //if((ret = setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, (const char*)&mreq6, sizeof(mreq6)))) + //{ + // TNET_PRINT_LAST_ERROR("Failed to join IPv6 multicast group."); + // return ret; + //} + + return ret; +} + int tnet_sockfd_leavegroup6(tnet_fd_t fd, const char* multiaddr, unsigned iface_index) { - //if(multiaddr) - { - } + //if(multiaddr) + { + } return -1; } @@ -711,8 +752,8 @@ int tnet_sockfd_sendto(tnet_fd_t fd, const struct sockaddr *to, const void* buf, return -2; } -#if TNET_HAVE_SS_LEN - return sendto(fd, buf, size, 0, to, to->ss_len); +#if TNET_HAVE_SA_LEN + return sendto(fd, buf, size, 0, to, to->sa_len); #else //return sendto(fd, buf, size, 0, to, sizeof(*to)); return sendto(fd, buf, size, 0, to, @@ -730,8 +771,8 @@ int tnet_sockfd_recvfrom(tnet_fd_t fd, void* buf, size_t size, int flags, struct return -1; } -#if TNET_HAVE_SS_LEN - fromlen = from->ss_len; +#if TNET_HAVE_SA_LEN + fromlen = from->sa_len; #else fromlen = sizeof(*from); #endif diff --git a/trunk/tinyNET/test/test.c b/trunk/tinyNET/test/test.c index 3b4eeef8..703ad88b 100644 --- a/trunk/tinyNET/test/test.c +++ b/trunk/tinyNET/test/test.c @@ -52,8 +52,8 @@ #define RUN_TEST_NAT 0 #define RUN_TEST_IFACES 0 #define RUN_TEST_DNS 0 -#define RUN_TEST_DHCP 0 -#define RUN_TEST_DHCP6 1 +#define RUN_TEST_DHCP 1 +#define RUN_TEST_DHCP6 0 #ifdef _WIN32_WCE int _tmain(int argc, _TCHAR* argv[]) diff --git a/trunk/tinyNET/test/test_ifaces.h b/trunk/tinyNET/test/test_ifaces.h index d468071d..c22b7959 100644 --- a/trunk/tinyNET/test/test_ifaces.h +++ b/trunk/tinyNET/test/test_ifaces.h @@ -67,7 +67,7 @@ void test_ifaces_dump_addresses() void test_ifaces() { - test_ifaces_dump_ifaces(); + test_ifaces_dump_ifaces(); test_ifaces_dump_addresses(); } diff --git a/trunk/tinySAK/src/tsk_uuid.c b/trunk/tinySAK/src/tsk_uuid.c index 28f585f0..6e43de2f 100644 --- a/trunk/tinySAK/src/tsk_uuid.c +++ b/trunk/tinySAK/src/tsk_uuid.c @@ -35,6 +35,7 @@ #include "tsk_time.h" #include +#include int tsk_uuidgenerate(tsk_uuidstring_t *result) { diff --git a/trunk/xcode/tinyNET/tinyNET.xcodeproj/diopmamadou.pbxuser b/trunk/xcode/tinyNET/tinyNET.xcodeproj/diopmamadou.pbxuser index 657a806d..08af942b 100644 --- a/trunk/xcode/tinyNET/tinyNET.xcodeproj/diopmamadou.pbxuser +++ b/trunk/xcode/tinyNET/tinyNET.xcodeproj/diopmamadou.pbxuser @@ -3,15 +3,12 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { activeBuildConfigurationName = Debug; activeExecutable = ECE5BA9D10EF6E1900B7EDDD /* test */; - activeTarget = D2AAC0620554660B00DB518D /* tinyNET */; + activeTarget = ECE5BA9B10EF6E1900B7EDDD /* test */; addToTargets = ( - ECE5BA9B10EF6E1900B7EDDD /* test */, + D2AAC0620554660B00DB518D /* tinyNET */, ); breakpoints = ( - EC057C7510EF759600280149 /* test.c:49 */, - EC057C7710EF759800280149 /* test.c:60 */, - EC057C7910EF759C00280149 /* test.c:55 */, - EC057C9410EF7A2D00280149 /* tnet_utils.c:290 */, + EC057C9410EF7A2D00280149 /* tnet_utils.c:331 */, EC057C9710EF7A7200280149 /* test_transport.h:71 */, EC057CFB10EF7EB200280149 /* tnet_transport.c:187 */, EC057D0710EF80E300280149 /* test_transport.h:40 */, @@ -27,6 +24,12 @@ ECED60D810F97CF8006B4DC9 /* tnet_transport_poll.c:393 */, ECED60F310F97E82006B4DC9 /* tnet_transport_poll.c:370 */, ECE8D52D10FBD9DE00B2464F /* test_transport.h:139 */, + EC9A8E761124C78C0046F5EC /* test_ifaces.h:70 */, + EC9A8EA81124C99E0046F5EC /* tnet_dns.c:184 */, + EC9A8EAC1124C9B10046F5EC /* tnet_dns.c:162 */, + EC9A8EC01124CA580046F5EC /* tnet_dns.c:138 */, + EC9A8ED31124CAF70046F5EC /* tnet_dhcp.c:68 */, + EC9A8EDF1124CBE00046F5EC /* tnet_socket.c:189 */, ); codeSenseManager = ECE5B90510EF65C200B7EDDD /* Code sense */; executables = ( @@ -38,7 +41,7 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Target_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 778, + 935, 20, 48, 43, @@ -100,7 +103,7 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 1178, + 895, 60, 20, 48, @@ -117,52 +120,168 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 284940252; - PBXWorkspaceStateSaveDate = 284940252; + PBXPerProjectTemplateStateSaveDate = 287618766; + PBXWorkspaceStateSaveDate = 287618766; }; perUserProjectItems = { + EC9A8DEC1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DEC1124B9360046F5EC /* PBXTextBookmark */; + EC9A8DEF1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DEF1124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF21124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF21124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF31124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF31124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF41124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF41124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF51124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF51124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF61124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF61124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF71124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF71124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF81124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF81124B9360046F5EC /* PBXTextBookmark */; + EC9A8DF91124B9360046F5EC /* PBXTextBookmark */ = EC9A8DF91124B9360046F5EC /* PBXTextBookmark */; + EC9A8DFA1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DFA1124B9360046F5EC /* PBXTextBookmark */; + EC9A8DFB1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DFB1124B9360046F5EC /* PBXTextBookmark */; + EC9A8DFC1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DFC1124B9360046F5EC /* PBXTextBookmark */; + EC9A8DFD1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DFD1124B9360046F5EC /* PBXTextBookmark */; + EC9A8DFE1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DFE1124B9360046F5EC /* PBXTextBookmark */; + EC9A8DFF1124B9360046F5EC /* PBXTextBookmark */ = EC9A8DFF1124B9360046F5EC /* PBXTextBookmark */; + EC9A8E001124B9360046F5EC /* PBXTextBookmark */ = EC9A8E001124B9360046F5EC /* PBXTextBookmark */; + EC9A8E0C1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E0C1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E0E1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E0E1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E0F1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E0F1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E101124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E101124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E121124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E121124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E131124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E131124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E151124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E151124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E191124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E191124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E1B1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E1B1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E1C1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E1C1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E1D1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E1D1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E1E1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E1E1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E1F1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E1F1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E201124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E201124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E211124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E211124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E221124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E221124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E231124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E231124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E241124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E241124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E251124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E251124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E261124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E261124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E271124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E271124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E281124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E281124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E2A1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E2A1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E2B1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E2B1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E2C1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E2C1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E2D1124BB6C0046F5EC /* PBXTextBookmark */ = EC9A8E2D1124BB6C0046F5EC /* PBXTextBookmark */; + EC9A8E311124BE6A0046F5EC /* PBXTextBookmark */ = EC9A8E311124BE6A0046F5EC /* PBXTextBookmark */; + EC9A8E331124BE6A0046F5EC /* PBXTextBookmark */ = EC9A8E331124BE6A0046F5EC /* PBXTextBookmark */; + EC9A8E341124BE6A0046F5EC /* PBXTextBookmark */ = EC9A8E341124BE6A0046F5EC /* PBXTextBookmark */; + EC9A8E351124BE6A0046F5EC /* PBXTextBookmark */ = EC9A8E351124BE6A0046F5EC /* PBXTextBookmark */; + EC9A8E361124BE6A0046F5EC /* PBXTextBookmark */ = EC9A8E361124BE6A0046F5EC /* PBXTextBookmark */; + EC9A8E371124BE6A0046F5EC /* PBXTextBookmark */ = EC9A8E371124BE6A0046F5EC /* PBXTextBookmark */; + EC9A8E381124BE6A0046F5EC /* PBXTextBookmark */ = EC9A8E381124BE6A0046F5EC /* PBXTextBookmark */; + EC9A8E451124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E451124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E461124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E461124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E471124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E471124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E491124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E491124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E4A1124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E4A1124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E4C1124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E4C1124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E4D1124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E4D1124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E4F1124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E4F1124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E501124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E501124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E521124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E521124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E531124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E531124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E541124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E541124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E551124C04A0046F5EC /* PBXTextBookmark */ = EC9A8E551124C04A0046F5EC /* PBXTextBookmark */; + EC9A8E5A1124C3670046F5EC /* PBXTextBookmark */ = EC9A8E5A1124C3670046F5EC /* PBXTextBookmark */; + EC9A8E5C1124C3670046F5EC /* PBXTextBookmark */ = EC9A8E5C1124C3670046F5EC /* PBXTextBookmark */; + EC9A8E5D1124C3670046F5EC /* PBXTextBookmark */ = EC9A8E5D1124C3670046F5EC /* PBXTextBookmark */; + EC9A8E601124C3AC0046F5EC /* PBXTextBookmark */ = EC9A8E601124C3AC0046F5EC /* PBXTextBookmark */; + EC9A8E621124C3AC0046F5EC /* PBXTextBookmark */ = EC9A8E621124C3AC0046F5EC /* PBXTextBookmark */; + EC9A8E641124C5CF0046F5EC /* PBXTextBookmark */ = EC9A8E641124C5CF0046F5EC /* PBXTextBookmark */; + EC9A8E671124C5CF0046F5EC /* PBXTextBookmark */ = EC9A8E671124C5CF0046F5EC /* PBXTextBookmark */; + EC9A8E681124C5CF0046F5EC /* PBXTextBookmark */ = EC9A8E681124C5CF0046F5EC /* PBXTextBookmark */; + EC9A8E691124C5CF0046F5EC /* PBXTextBookmark */ = EC9A8E691124C5CF0046F5EC /* PBXTextBookmark */; + EC9A8E6D1124C62F0046F5EC /* PBXTextBookmark */ = EC9A8E6D1124C62F0046F5EC /* PBXTextBookmark */; + EC9A8E7F1124C8880046F5EC /* PBXTextBookmark */ = EC9A8E7F1124C8880046F5EC /* PBXTextBookmark */; + EC9A8E801124C8880046F5EC /* PBXTextBookmark */ = EC9A8E801124C8880046F5EC /* PBXTextBookmark */; + EC9A8E821124C8880046F5EC /* PBXTextBookmark */ = EC9A8E821124C8880046F5EC /* PBXTextBookmark */; + EC9A8E851124C8880046F5EC /* PBXTextBookmark */ = EC9A8E851124C8880046F5EC /* PBXTextBookmark */; + EC9A8E861124C8880046F5EC /* PBXTextBookmark */ = EC9A8E861124C8880046F5EC /* PBXTextBookmark */; + EC9A8E871124C8880046F5EC /* PBXTextBookmark */ = EC9A8E871124C8880046F5EC /* PBXTextBookmark */; + EC9A8E881124C8880046F5EC /* PBXTextBookmark */ = EC9A8E881124C8880046F5EC /* PBXTextBookmark */; + EC9A8E891124C8880046F5EC /* PBXTextBookmark */ = EC9A8E891124C8880046F5EC /* PBXTextBookmark */; + EC9A8E8A1124C8880046F5EC /* PBXTextBookmark */ = EC9A8E8A1124C8880046F5EC /* PBXTextBookmark */; + EC9A8E8B1124C8880046F5EC /* PBXTextBookmark */ = EC9A8E8B1124C8880046F5EC /* PBXTextBookmark */; + EC9A8E8C1124C8880046F5EC /* PBXTextBookmark */ = EC9A8E8C1124C8880046F5EC /* PBXTextBookmark */; + EC9A8E8D1124C8880046F5EC /* PBXTextBookmark */ = EC9A8E8D1124C8880046F5EC /* PBXTextBookmark */; + EC9A8E8E1124C8880046F5EC /* PBXTextBookmark */ = EC9A8E8E1124C8880046F5EC /* PBXTextBookmark */; + EC9A8E8F1124C8880046F5EC /* PBXTextBookmark */ = EC9A8E8F1124C8880046F5EC /* PBXTextBookmark */; + EC9A8E901124C8880046F5EC /* PBXTextBookmark */ = EC9A8E901124C8880046F5EC /* PBXTextBookmark */; + EC9A8E911124C8880046F5EC /* PBXTextBookmark */ = EC9A8E911124C8880046F5EC /* PBXTextBookmark */; + EC9A8E9A1124C8EE0046F5EC /* PBXTextBookmark */ = EC9A8E9A1124C8EE0046F5EC /* PBXTextBookmark */; + EC9A8E9B1124C8EE0046F5EC /* PBXTextBookmark */ = EC9A8E9B1124C8EE0046F5EC /* PBXTextBookmark */; + EC9A8EB11124CA190046F5EC /* PBXTextBookmark */ = EC9A8EB11124CA190046F5EC /* PBXTextBookmark */; + EC9A8EB21124CA190046F5EC /* PBXTextBookmark */ = EC9A8EB21124CA190046F5EC /* PBXTextBookmark */; + EC9A8EB51124CA190046F5EC /* PBXTextBookmark */ = EC9A8EB51124CA190046F5EC /* PBXTextBookmark */; + EC9A8EB61124CA190046F5EC /* PBXTextBookmark */ = EC9A8EB61124CA190046F5EC /* PBXTextBookmark */; + EC9A8EB71124CA190046F5EC /* PBXTextBookmark */ = EC9A8EB71124CA190046F5EC /* PBXTextBookmark */; + EC9A8EB81124CA190046F5EC /* PBXTextBookmark */ = EC9A8EB81124CA190046F5EC /* PBXTextBookmark */; + EC9A8EB91124CA190046F5EC /* PBXTextBookmark */ = EC9A8EB91124CA190046F5EC /* PBXTextBookmark */; + EC9A8EBA1124CA190046F5EC /* PBXTextBookmark */ = EC9A8EBA1124CA190046F5EC /* PBXTextBookmark */; + EC9A8EBB1124CA190046F5EC /* PBXTextBookmark */ = EC9A8EBB1124CA190046F5EC /* PBXTextBookmark */; + EC9A8EBC1124CA190046F5EC /* PBXTextBookmark */ = EC9A8EBC1124CA190046F5EC /* PBXTextBookmark */; + EC9A8EC51124CA9A0046F5EC /* PBXTextBookmark */ = EC9A8EC51124CA9A0046F5EC /* PBXTextBookmark */; + EC9A8EC71124CA9A0046F5EC /* PBXTextBookmark */ = EC9A8EC71124CA9A0046F5EC /* PBXTextBookmark */; + EC9A8EC81124CA9A0046F5EC /* PBXTextBookmark */ = EC9A8EC81124CA9A0046F5EC /* PBXTextBookmark */; + EC9A8EC91124CA9A0046F5EC /* PBXTextBookmark */ = EC9A8EC91124CA9A0046F5EC /* PBXTextBookmark */; + EC9A8ECA1124CA9A0046F5EC /* PBXTextBookmark */ = EC9A8ECA1124CA9A0046F5EC /* PBXTextBookmark */; + EC9A8ECB1124CA9A0046F5EC /* PBXTextBookmark */ = EC9A8ECB1124CA9A0046F5EC /* PBXTextBookmark */; + EC9A8ED61124CB1F0046F5EC /* PBXTextBookmark */ = EC9A8ED61124CB1F0046F5EC /* PBXTextBookmark */; + EC9A8EE01124CBF10046F5EC /* PBXTextBookmark */ = EC9A8EE01124CBF10046F5EC /* PBXTextBookmark */; + EC9A8EE31124CBF10046F5EC /* PBXTextBookmark */ = EC9A8EE31124CBF10046F5EC /* PBXTextBookmark */; + EC9A8EE41124CBF10046F5EC /* PBXTextBookmark */ = EC9A8EE41124CBF10046F5EC /* PBXTextBookmark */; + EC9A8EE51124CBF10046F5EC /* PBXTextBookmark */ = EC9A8EE51124CBF10046F5EC /* PBXTextBookmark */; + EC9A8EE61124CBF10046F5EC /* PBXTextBookmark */ = EC9A8EE61124CBF10046F5EC /* PBXTextBookmark */; + EC9A8EE71124CBF10046F5EC /* PBXTextBookmark */ = EC9A8EE71124CBF10046F5EC /* PBXTextBookmark */; + EC9A8EFD1124CE400046F5EC /* PBXTextBookmark */ = EC9A8EFD1124CE400046F5EC /* PBXTextBookmark */; + EC9A8EFE1124CE400046F5EC /* PBXTextBookmark */ = EC9A8EFE1124CE400046F5EC /* PBXTextBookmark */; + EC9A8F021124CE400046F5EC /* PBXTextBookmark */ = EC9A8F021124CE400046F5EC /* PBXTextBookmark */; + EC9A8F031124CE400046F5EC /* PBXTextBookmark */ = EC9A8F031124CE400046F5EC /* PBXTextBookmark */; + EC9A8F041124CE400046F5EC /* PBXTextBookmark */ = EC9A8F041124CE400046F5EC /* PBXTextBookmark */; + EC9A8F051124CE400046F5EC /* PBXTextBookmark */ = EC9A8F051124CE400046F5EC /* PBXTextBookmark */; + EC9A8F061124CE400046F5EC /* PBXTextBookmark */ = EC9A8F061124CE400046F5EC /* PBXTextBookmark */; + EC9A8F071124CE400046F5EC /* PBXTextBookmark */ = EC9A8F071124CE400046F5EC /* PBXTextBookmark */; + EC9A8F081124CE400046F5EC /* PBXTextBookmark */ = EC9A8F081124CE400046F5EC /* PBXTextBookmark */; + EC9A8F091124CE400046F5EC /* PBXTextBookmark */ = EC9A8F091124CE400046F5EC /* PBXTextBookmark */; + EC9A8F0A1124CE400046F5EC /* PBXTextBookmark */ = EC9A8F0A1124CE400046F5EC /* PBXTextBookmark */; + EC9A8F0B1124CE400046F5EC /* PBXTextBookmark */ = EC9A8F0B1124CE400046F5EC /* PBXTextBookmark */; + EC9A8F0C1124CE400046F5EC /* PBXTextBookmark */ = EC9A8F0C1124CE400046F5EC /* PBXTextBookmark */; + EC9A8F0D1124CE400046F5EC /* PBXTextBookmark */ = EC9A8F0D1124CE400046F5EC /* PBXTextBookmark */; + EC9A8F121124CE950046F5EC /* PBXTextBookmark */ = EC9A8F121124CE950046F5EC /* PBXTextBookmark */; + EC9A8F171124D2690046F5EC /* PBXTextBookmark */ = EC9A8F171124D2690046F5EC /* PBXTextBookmark */; + EC9A8F181124D2690046F5EC /* PBXTextBookmark */ = EC9A8F181124D2690046F5EC /* PBXTextBookmark */; + EC9A8F191124D2690046F5EC /* PBXTextBookmark */ = EC9A8F191124D2690046F5EC /* PBXTextBookmark */; + EC9A8F1B1124D2690046F5EC /* PBXTextBookmark */ = EC9A8F1B1124D2690046F5EC /* PBXTextBookmark */; + EC9A8F1D1124D2690046F5EC /* PBXTextBookmark */ = EC9A8F1D1124D2690046F5EC /* PBXTextBookmark */; + EC9A8F1E1124D2690046F5EC /* PBXTextBookmark */ = EC9A8F1E1124D2690046F5EC /* PBXTextBookmark */; + EC9A8F1F1124D2690046F5EC /* PBXTextBookmark */ = EC9A8F1F1124D2690046F5EC /* PBXTextBookmark */; + EC9A8F211124D2690046F5EC /* PBXTextBookmark */ = EC9A8F211124D2690046F5EC /* PBXTextBookmark */; + EC9A8F221124D2690046F5EC /* PBXTextBookmark */ = EC9A8F221124D2690046F5EC /* PBXTextBookmark */; + EC9A8F231124D2690046F5EC /* PBXTextBookmark */ = EC9A8F231124D2690046F5EC /* PBXTextBookmark */; + EC9A8F241124D2690046F5EC /* PBXTextBookmark */ = EC9A8F241124D2690046F5EC /* PBXTextBookmark */; + EC9A8F261124D2690046F5EC /* PBXTextBookmark */ = EC9A8F261124D2690046F5EC /* PBXTextBookmark */; + EC9A8F281124D4490046F5EC /* PBXTextBookmark */ = EC9A8F281124D4490046F5EC /* PBXTextBookmark */; + EC9A8F291124D4490046F5EC /* PBXTextBookmark */ = EC9A8F291124D4490046F5EC /* PBXTextBookmark */; + EC9A8F2B1124D4E90046F5EC /* PBXTextBookmark */ = EC9A8F2B1124D4E90046F5EC /* PBXTextBookmark */; ECE8D4F910FBD85A00B2464F /* PBXTextBookmark */ = ECE8D4F910FBD85A00B2464F /* PBXTextBookmark */; - ECE8D4FC10FBD85A00B2464F /* PBXTextBookmark */ = ECE8D4FC10FBD85A00B2464F /* PBXTextBookmark */; ECE8D4FD10FBD85A00B2464F /* PBXTextBookmark */ = ECE8D4FD10FBD85A00B2464F /* PBXTextBookmark */; - ECE8D4FE10FBD85A00B2464F /* PBXTextBookmark */ = ECE8D4FE10FBD85A00B2464F /* PBXTextBookmark */; - ECE8D4FF10FBD85A00B2464F /* PBXTextBookmark */ = ECE8D4FF10FBD85A00B2464F /* PBXTextBookmark */; ECE8D50E10FBD90900B2464F /* PBXTextBookmark */ = ECE8D50E10FBD90900B2464F /* PBXTextBookmark */; - ECE8D51010FBD90900B2464F /* PBXTextBookmark */ = ECE8D51010FBD90900B2464F /* PBXTextBookmark */; - ECE8D51110FBD90900B2464F /* PBXTextBookmark */ = ECE8D51110FBD90900B2464F /* PBXTextBookmark */; - ECE8D51210FBD90900B2464F /* PBXTextBookmark */ = ECE8D51210FBD90900B2464F /* PBXTextBookmark */; - ECE8D51310FBD90900B2464F /* PBXTextBookmark */ = ECE8D51310FBD90900B2464F /* PBXTextBookmark */; - ECE8D51C10FBD95D00B2464F /* PBXTextBookmark */ = ECE8D51C10FBD95D00B2464F /* PBXTextBookmark */; - ECE8D52610FBD9AE00B2464F /* PBXTextBookmark */ = ECE8D52610FBD9AE00B2464F /* PBXTextBookmark */; - ECE8D52710FBD9AE00B2464F /* PBXTextBookmark */ = ECE8D52710FBD9AE00B2464F /* PBXTextBookmark */; - ECE8D53010FBD9E600B2464F /* PBXTextBookmark */ = ECE8D53010FBD9E600B2464F /* PBXTextBookmark */; - ECE8D53110FBD9E600B2464F /* PBXTextBookmark */ = ECE8D53110FBD9E600B2464F /* PBXTextBookmark */; - ECE8D53210FBD9E600B2464F /* PBXTextBookmark */ = ECE8D53210FBD9E600B2464F /* PBXTextBookmark */; ECE8D53810FBDA7B00B2464F /* PBXTextBookmark */ = ECE8D53810FBDA7B00B2464F /* PBXTextBookmark */; ECE8D53F10FBDA7B00B2464F /* PBXTextBookmark */ = ECE8D53F10FBDA7B00B2464F /* PBXTextBookmark */; ECE8D54510FBE5D100B2464F /* PBXTextBookmark */ = ECE8D54510FBE5D100B2464F /* PBXTextBookmark */; ECE8D54810FBE5D100B2464F /* PBXTextBookmark */ = ECE8D54810FBE5D100B2464F /* PBXTextBookmark */; - ECE8D54910FBE5D100B2464F /* PBXTextBookmark */ = ECE8D54910FBE5D100B2464F /* PBXTextBookmark */; - ECE8D54A10FBE5D100B2464F /* PBXTextBookmark */ = ECE8D54A10FBE5D100B2464F /* PBXTextBookmark */; - ECE8D54F10FBE62700B2464F /* PBXTextBookmark */ = ECE8D54F10FBE62700B2464F /* PBXTextBookmark */; - ECE8D55110FBE62700B2464F /* PBXTextBookmark */ = ECE8D55110FBE62700B2464F /* PBXTextBookmark */; - ECE8D55210FBE62700B2464F /* PBXTextBookmark */ = ECE8D55210FBE62700B2464F /* PBXTextBookmark */; ECE8D55710FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D55710FBE7FD00B2464F /* PBXTextBookmark */; ECE8D55810FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D55810FBE7FD00B2464F /* PBXTextBookmark */; - ECE8D55A10FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D55A10FBE7FD00B2464F /* PBXTextBookmark */; - ECE8D55D10FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D55D10FBE7FD00B2464F /* PBXTextBookmark */; - ECE8D55E10FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D55E10FBE7FD00B2464F /* PBXTextBookmark */; ECE8D55F10FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D55F10FBE7FD00B2464F /* PBXTextBookmark */; - ECE8D56110FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D56110FBE7FD00B2464F /* PBXTextBookmark */; ECE8D56210FBE7FD00B2464F /* PBXTextBookmark */ = ECE8D56210FBE7FD00B2464F /* PBXTextBookmark */; - ECE8D56710FBE8F100B2464F /* PBXTextBookmark */ = ECE8D56710FBE8F100B2464F /* PBXTextBookmark */; - ECE8D56810FBE8F100B2464F /* PBXTextBookmark */ = ECE8D56810FBE8F100B2464F /* PBXTextBookmark */; - ECE8D56910FBE8F100B2464F /* PBXTextBookmark */ = ECE8D56910FBE8F100B2464F /* PBXTextBookmark */; - ECE8D56E10FBEDEA00B2464F /* PBXTextBookmark */ = ECE8D56E10FBEDEA00B2464F /* PBXTextBookmark */; - ECED600210F96CF8006B4DC9 /* PBXTextBookmark */ = ECED600210F96CF8006B4DC9 /* PBXTextBookmark */; ECED600610F96CF8006B4DC9 /* PBXTextBookmark */ = ECED600610F96CF8006B4DC9 /* PBXTextBookmark */; ECED600710F96CF8006B4DC9 /* PBXTextBookmark */ = ECED600710F96CF8006B4DC9 /* PBXTextBookmark */; ECED600910F96CF8006B4DC9 /* PBXTextBookmark */ = ECED600910F96CF8006B4DC9 /* PBXTextBookmark */; - ECED600A10F96CF8006B4DC9 /* PBXTextBookmark */ = ECED600A10F96CF8006B4DC9 /* PBXTextBookmark */; ECED600C10F96CF8006B4DC9 /* PBXTextBookmark */ = ECED600C10F96CF8006B4DC9 /* PBXTextBookmark */; ECED602110F96D50006B4DC9 /* PBXTextBookmark */ = ECED602110F96D50006B4DC9 /* PBXTextBookmark */; ECED602B10F96D99006B4DC9 /* PBXTextBookmark */ = ECED602B10F96D99006B4DC9 /* PBXTextBookmark */; @@ -185,58 +304,7 @@ D2AAC0620554660B00DB518D /* tinyNET */ = { activeExec = 0; }; - EC057C7510EF759600280149 /* test.c:49 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - functionName = "main()"; - hitCount = 1; - ignoreCount = 0; - lineNumber = 49; - location = test; - modificationTime = 284943905.078947; - state = 1; - }; - EC057C7710EF759800280149 /* test.c:60 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - functionName = "main()"; - hitCount = 1; - ignoreCount = 0; - lineNumber = 60; - location = test; - modificationTime = 284943907.479601; - state = 1; - }; - EC057C7910EF759C00280149 /* test.c:55 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - functionName = "main()"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 55; - location = test; - modificationTime = 284943903.868526; - state = 1; - }; - EC057C9410EF7A2D00280149 /* tnet_utils.c:290 */ = { + EC057C9410EF7A2D00280149 /* tnet_utils.c:331 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -248,9 +316,9 @@ functionName = "tnet_sockfd_init()"; hitCount = 0; ignoreCount = 0; - lineNumber = 290; + lineNumber = 331; location = libtinyNET.dylib; - modificationTime = 284943903.868588; + modificationTime = 287625823.750541; state = 1; }; EC057C9710EF7A7200280149 /* test_transport.h:71 */ = { @@ -267,7 +335,7 @@ ignoreCount = 0; lineNumber = 71; location = test; - modificationTime = 284943903.868653; + modificationTime = 287625823.905545; state = 1; }; EC057CFB10EF7EB200280149 /* tnet_transport.c:187 */ = { @@ -284,7 +352,7 @@ ignoreCount = 0; lineNumber = 187; location = libtinyNET.dylib; - modificationTime = 284943903.868751; + modificationTime = 287625822.393614; state = 2; }; EC057D0710EF80E300280149 /* test_transport.h:40 */ = { @@ -301,7 +369,7 @@ ignoreCount = 0; lineNumber = 40; location = test; - modificationTime = 284943903.868814; + modificationTime = 287625823.927514; state = 1; }; EC057D0910EF80E500280149 /* test_transport.h:46 */ = { @@ -318,9 +386,1816 @@ ignoreCount = 0; lineNumber = 46; location = test; - modificationTime = 284943903.8689; + modificationTime = 287625822.393718; state = 2; }; + EC9A8CCF1124B74C0046F5EC /* test_dns.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 1288}}"; + sepNavSelRange = "{1899, 0}"; + sepNavVisRange = "{1344, 867}"; + }; + }; + EC9A8CD01124B74C0046F5EC /* test_ifaces.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1859, 1050}}"; + sepNavSelRange = "{1242, 0}"; + sepNavVisRange = "{1509, 370}"; + }; + }; + EC9A8D371124B7C90046F5EC /* tsk_uuid.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 1120}}"; + sepNavSelRange = "{1191, 0}"; + sepNavVisRange = "{1009, 1332}"; + }; + }; + EC9A8D441124B8160046F5EC /* tnet_dhcp.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 4396}}"; + sepNavSelRange = "{2227, 0}"; + sepNavVisRange = "{1139, 1317}"; + }; + }; + EC9A8D451124B8160046F5EC /* tnet_dhcp.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 1596}}"; + sepNavSelRange = "{2099, 0}"; + sepNavVisRange = "{1269, 1331}"; + }; + }; + EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 4938}}"; + sepNavSelRange = "{1228, 0}"; + sepNavVisRange = "{40, 1385}"; + }; + }; + EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 3178}}"; + sepNavSelRange = "{1156, 0}"; + sepNavVisRange = "{40, 1705}"; + }; + }; + EC9A8D4A1124B8160046F5EC /* tnet_dhcp_option_sip.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 1834}}"; + sepNavSelRange = "{1083, 30}"; + sepNavVisRange = "{0, 1500}"; + }; + }; + EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 3458}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{1529, 1416}"; + }; + }; + EC9A8D4F1124B8160046F5EC /* tnet_dhcp6_duid.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 4004}}"; + sepNavSelRange = "{1968, 0}"; + sepNavVisRange = "{1477, 805}"; + }; + }; + EC9A8D511124B8160046F5EC /* tnet_dhcp6_message.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 1652}}"; + sepNavSelRange = "{1047, 0}"; + sepNavVisRange = "{0, 1355}"; + }; + }; + EC9A8D521124B8160046F5EC /* tnet_dhcp6_message.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 2016}}"; + sepNavSelRange = "{1142, 0}"; + sepNavVisRange = "{0, 1478}"; + }; + }; + EC9A8D531124B8160046F5EC /* tnet_dhcp6_option.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 4858}}"; + sepNavSelRange = "{1707, 0}"; + sepNavVisRange = "{1307, 835}"; + }; + }; + EC9A8D541124B8160046F5EC /* tnet_dhcp6_option.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 3360}}"; + sepNavSelRange = "{8961, 0}"; + sepNavVisRange = "{7431, 2236}"; + }; + }; + EC9A8D561124B8160046F5EC /* tnet_dns.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 7280}}"; + sepNavSelRange = "{1777, 0}"; + sepNavVisRange = "{3636, 1190}"; + }; + }; + EC9A8D571124B8160046F5EC /* tnet_dns.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1308, 1456}}"; + sepNavSelRange = "{1720, 0}"; + sepNavVisRange = "{1835, 1459}"; + }; + }; + EC9A8D791124B8160046F5EC /* tnet_stun.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 2072}}"; + sepNavSelRange = "{945, 0}"; + sepNavVisRange = "{294, 1557}"; + }; + }; + EC9A8D7C1124B8160046F5EC /* tnet_stun_message.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 5894}}"; + sepNavSelRange = "{1199, 0}"; + sepNavVisRange = "{95, 1587}"; + }; + }; + EC9A8D7E1124B8160046F5EC /* tinyNET_config.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 1638}}"; + sepNavSelRange = "{2760, 12}"; + sepNavVisRange = "{2024, 969}"; + }; + }; + EC9A8D891124B8160046F5EC /* tnet_socket.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 3710}}"; + sepNavSelRange = "{4371, 0}"; + sepNavVisRange = "{4358, 1287}"; + }; + }; + EC9A8D8F1124B8160046F5EC /* tnet_types.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 1386}}"; + sepNavSelRange = "{1332, 0}"; + sepNavVisRange = "{639, 875}"; + }; + }; + EC9A8D901124B8160046F5EC /* tnet_utils.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 13510}}"; + sepNavSelRange = "{1325, 0}"; + sepNavVisRange = "{957, 722}"; + }; + }; + EC9A8D911124B8160046F5EC /* tnet_utils.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1320, 1946}}"; + sepNavSelRange = "{5588, 0}"; + sepNavVisRange = "{5491, 478}"; + }; + }; + EC9A8D931124B8160046F5EC /* tnet_turn.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 10706}}"; + sepNavSelRange = "{7444, 55}"; + sepNavVisRange = "{7901, 1497}"; + }; + }; + EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 8582}}"; + sepNavSelRange = "{14902, 51}"; + sepNavVisRange = "{14290, 1234}"; + }; + }; + EC9A8D971124B8160046F5EC /* tnet_turn_message.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 2240}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1381}"; + }; + }; + EC9A8DEC1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D371124B7C90046F5EC /* tsk_uuid.c */; + name = "tsk_uuid.c: 38"; + rLen = 0; + rLoc = 1191; + rType = 0; + vrLen = 1332; + vrLoc = 1009; + }; + EC9A8DEF1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4A1124B8160046F5EC /* tnet_dhcp_option_sip.c */; + name = "tnet_dhcp_option_sip.c: 32"; + rLen = 30; + rLoc = 1083; + rType = 0; + vrLen = 1421; + vrLoc = 0; + }; + EC9A8DF21124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5B91310EF65EF00B7EDDD /* tnet_types.h */; + name = "tnet_types.h: 101"; + rLen = 0; + rLoc = 2356; + rType = 0; + vrLen = 885; + vrLoc = 639; + }; + EC9A8DF31124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D371124B7C90046F5EC /* tsk_uuid.c */; + name = "tsk_uuid.c: 38"; + rLen = 0; + rLoc = 1191; + rType = 0; + vrLen = 1332; + vrLoc = 1009; + }; + EC9A8DF41124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 39"; + rLen = 27; + rLoc = 1179; + rType = 0; + vrLen = 1070; + vrLoc = 728; + }; + EC9A8DF51124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 215"; + rLen = 112; + rLoc = 8095; + rType = 0; + vrLen = 1902; + vrLoc = 6712; + }; + EC9A8DF61124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 164"; + rLen = 3; + rLoc = 5303; + rType = 0; + vrLen = 1098; + vrLoc = 4617; + }; + EC9A8DF71124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 216"; + rLen = 122; + rLoc = 8207; + rType = 0; + vrLen = 1902; + vrLoc = 6712; + }; + EC9A8DF81124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 164"; + rLen = 3; + rLoc = 5303; + rType = 0; + vrLen = 1098; + vrLoc = 4617; + }; + EC9A8DF91124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 216"; + rLen = 122; + rLoc = 8207; + rType = 0; + vrLen = 1902; + vrLoc = 6712; + }; + EC9A8DFA1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 164"; + rLen = 3; + rLoc = 5303; + rType = 0; + vrLen = 1098; + vrLoc = 4617; + }; + EC9A8DFB1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 216"; + rLen = 122; + rLoc = 8207; + rType = 0; + vrLen = 1902; + vrLoc = 6712; + }; + EC9A8DFC1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 164"; + rLen = 3; + rLoc = 5303; + rType = 0; + vrLen = 1098; + vrLoc = 4617; + }; + EC9A8DFD1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 216"; + rLen = 122; + rLoc = 8207; + rType = 0; + vrLen = 1902; + vrLoc = 6712; + }; + EC9A8DFE1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 39"; + rLen = 0; + rLoc = 1161; + rType = 0; + vrLen = 1328; + vrLoc = 0; + }; + EC9A8DFF1124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4A1124B8160046F5EC /* tnet_dhcp_option_sip.c */; + name = "tnet_dhcp_option_sip.c: 32"; + rLen = 30; + rLoc = 1083; + rType = 0; + vrLen = 1421; + vrLoc = 0; + }; + EC9A8E001124B9360046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D791124B8160046F5EC /* tnet_stun.h */; + name = "tnet_stun.h: 129"; + rLen = 0; + rLoc = 3641; + rType = 0; + vrLen = 1685; + vrLoc = 2716; + }; + EC9A8E0C1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D971124B8160046F5EC /* tnet_turn_message.c */; + name = "tnet_turn_message.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1381; + vrLoc = 0; + }; + EC9A8E0E1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D931124B8160046F5EC /* tnet_turn.c */; + name = "tnet_turn.c: 220"; + rLen = 55; + rLoc = 7444; + rType = 0; + vrLen = 888; + vrLoc = 6768; + }; + EC9A8E0F1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 41"; + rLen = 0; + rLoc = 1228; + rType = 0; + vrLen = 1321; + vrLoc = 40; + }; + EC9A8E101124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 42"; + rLen = 0; + rLoc = 1156; + rType = 0; + vrLen = 1705; + vrLoc = 40; + }; + EC9A8E121124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D541124B8160046F5EC /* tnet_dhcp6_option.h */; + name = "tnet_dhcp6_option.h: 198"; + rLen = 0; + rLoc = 8961; + rType = 0; + vrLen = 2236; + vrLoc = 7431; + }; + EC9A8E131124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D521124B8160046F5EC /* tnet_dhcp6_message.h */; + name = "tnet_dhcp6_message.h: 41"; + rLen = 0; + rLoc = 1142; + rType = 0; + vrLen = 1478; + vrLoc = 0; + }; + EC9A8E151124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D531124B8160046F5EC /* tnet_dhcp6_option.c */; + name = "tnet_dhcp6_option.c: 71"; + rLen = 0; + rLoc = 1707; + rType = 0; + vrLen = 835; + vrLoc = 1307; + }; + EC9A8E171124BB6C0046F5EC /* if.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = if.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/net/if.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 5488}}"; + sepNavSelRange = "{9452, 53}"; + sepNavVisRange = "{8959, 1302}"; + }; + }; + EC9A8E191124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D7C1124B8160046F5EC /* tnet_stun_message.c */; + name = "tnet_stun_message.c: 42"; + rLen = 0; + rLoc = 1199; + rType = 0; + vrLen = 1587; + vrLoc = 95; + }; + EC9A8E1B1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */; + name = "tnet_turn_attribute.c: 592"; + rLen = 65; + rLoc = 15000; + rType = 0; + vrLen = 992; + vrLoc = 14400; + }; + EC9A8E1C1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D971124B8160046F5EC /* tnet_turn_message.c */; + name = "tnet_turn_message.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1381; + vrLoc = 0; + }; + EC9A8E1D1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */; + name = "tnet_turn_attribute.c: 599"; + rLen = 51; + rLoc = 15152; + rType = 0; + vrLen = 954; + vrLoc = 14570; + }; + EC9A8E1E1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D931124B8160046F5EC /* tnet_turn.c */; + name = "tnet_turn.c: 220"; + rLen = 55; + rLoc = 7444; + rType = 0; + vrLen = 888; + vrLoc = 6768; + }; + EC9A8E1F1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 215"; + rLen = 27; + rLoc = 8109; + rType = 0; + vrLen = 1902; + vrLoc = 6712; + }; + EC9A8E201124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; + name = "tnet_dhcp_message.c: 41"; + rLen = 0; + rLoc = 1228; + rType = 0; + vrLen = 1321; + vrLoc = 40; + }; + EC9A8E211124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; + name = "tnet_dhcp_message.h: 42"; + rLen = 0; + rLoc = 1156; + rType = 0; + vrLen = 1705; + vrLoc = 40; + }; + EC9A8E221124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 38"; + rLen = 0; + rLoc = 1289; + rType = 0; + vrLen = 1871; + vrLoc = 151; + }; + EC9A8E231124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D541124B8160046F5EC /* tnet_dhcp6_option.h */; + name = "tnet_dhcp6_option.h: 198"; + rLen = 0; + rLoc = 8961; + rType = 0; + vrLen = 2236; + vrLoc = 7431; + }; + EC9A8E241124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D521124B8160046F5EC /* tnet_dhcp6_message.h */; + name = "tnet_dhcp6_message.h: 41"; + rLen = 0; + rLoc = 1142; + rType = 0; + vrLen = 1478; + vrLoc = 0; + }; + EC9A8E251124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D511124B8160046F5EC /* tnet_dhcp6_message.c */; + name = "tnet_dhcp6_message.c: 22"; + rLen = 0; + rLoc = 788; + rType = 0; + vrLen = 1450; + vrLoc = 0; + }; + EC9A8E261124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D531124B8160046F5EC /* tnet_dhcp6_option.c */; + name = "tnet_dhcp6_option.c: 71"; + rLen = 0; + rLoc = 1707; + rType = 0; + vrLen = 835; + vrLoc = 1307; + }; + EC9A8E271124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 204"; + rLen = 8; + rLoc = 5911; + rType = 0; + vrLen = 949; + vrLoc = 4070; + }; + EC9A8E281124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E291124BB6C0046F5EC /* if.h */; + name = "if.h: 257"; + rLen = 53; + rLoc = 9452; + rType = 0; + vrLen = 1487; + vrLoc = 9137; + }; + EC9A8E291124BB6C0046F5EC /* if.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = if.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/net/if.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 5264}}"; + sepNavSelRange = "{9384, 15}"; + sepNavVisRange = "{8602, 1194}"; + }; + }; + EC9A8E2A1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 714"; + rLen = 16; + rLoc = 18808; + rType = 0; + vrLen = 1128; + vrLoc = 17096; + }; + EC9A8E2B1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D7E1124B8160046F5EC /* tinyNET_config.h */; + name = "tinyNET_config.h: 99"; + rLen = 16; + rLoc = 2696; + rType = 0; + vrLen = 1114; + vrLoc = 1698; + }; + EC9A8E2C1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 714"; + rLen = 0; + rLoc = 18820; + rType = 0; + vrLen = 994; + vrLoc = 17261; + }; + EC9A8E2D1124BB6C0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D7C1124B8160046F5EC /* tnet_stun_message.c */; + name = "tnet_stun_message.c: 42"; + rLen = 0; + rLoc = 1199; + rType = 0; + vrLen = 1587; + vrLoc = 95; + }; + EC9A8E311124BE6A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D7E1124B8160046F5EC /* tinyNET_config.h */; + name = "tinyNET_config.h: 103"; + rLen = 12; + rLoc = 2760; + rType = 0; + vrLen = 969; + vrLoc = 2024; + }; + EC9A8E331124BE6A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 204"; + rLen = 8; + rLoc = 5911; + rType = 0; + vrLen = 995; + vrLoc = 4231; + }; + EC9A8E341124BE6A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E171124BB6C0046F5EC /* if.h */; + name = "if.h: 257"; + rLen = 53; + rLoc = 9452; + rType = 0; + vrLen = 1254; + vrLoc = 11066; + }; + EC9A8E351124BE6A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 204"; + rLen = 8; + rLoc = 5911; + rType = 0; + vrLen = 995; + vrLoc = 4231; + }; + EC9A8E361124BE6A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E171124BB6C0046F5EC /* if.h */; + name = "if.h: 257"; + rLen = 53; + rLoc = 9452; + rType = 0; + vrLen = 1302; + vrLoc = 8959; + }; + EC9A8E371124BE6A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 156"; + rLen = 12; + rLoc = 3511; + rType = 0; + vrLen = 1011; + vrLoc = 3057; + }; + EC9A8E381124BE6A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D7E1124B8160046F5EC /* tinyNET_config.h */; + name = "tinyNET_config.h: 103"; + rLen = 12; + rLoc = 2760; + rType = 0; + vrLen = 969; + vrLoc = 2024; + }; + EC9A8E451124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */; + name = "tnet_turn_attribute.c: 589"; + rLen = 51; + rLoc = 14902; + rType = 0; + vrLen = 1234; + vrLoc = 14290; + }; + EC9A8E461124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4F1124B8160046F5EC /* tnet_dhcp6_duid.c */; + name = "tnet_dhcp6_duid.c: 73"; + rLen = 0; + rLoc = 1968; + rType = 0; + vrLen = 784; + vrLoc = 1477; + }; + EC9A8E471124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D511124B8160046F5EC /* tnet_dhcp6_message.c */; + name = "tnet_dhcp6_message.c: 34"; + rLen = 0; + rLoc = 1047; + rType = 0; + vrLen = 1355; + vrLoc = 0; + }; + EC9A8E491124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 163"; + rLen = 10; + rLoc = 3700; + rType = 0; + vrLen = 856; + vrLoc = 3421; + }; + EC9A8E4A1124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E4B1124C04A0046F5EC /* ifaddrs.h */; + name = "ifaddrs.h: 52"; + rLen = 48; + rLoc = 1805; + rType = 0; + vrLen = 1629; + vrLoc = 293; + }; + EC9A8E4B1124C04A0046F5EC /* ifaddrs.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = ifaddrs.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/ifaddrs.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 770}}"; + sepNavSelRange = "{1369, 18}"; + sepNavVisRange = "{0, 1790}"; + }; + }; + EC9A8E4C1124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 174"; + rLen = 0; + rLoc = 4960; + rType = 0; + vrLen = 864; + vrLoc = 3475; + }; + EC9A8E4D1124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E4E1124C04A0046F5EC /* ifaddrs.h */; + name = "ifaddrs.h: 32"; + rLen = 28; + rLoc = 1341; + rType = 0; + vrLen = 1790; + vrLoc = 0; + }; + EC9A8E4E1124C04A0046F5EC /* ifaddrs.h */ = { + isa = PBXFileReference; + name = ifaddrs.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/ifaddrs.h; + sourceTree = ""; + }; + EC9A8E4F1124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 163"; + rLen = 10; + rLoc = 3700; + rType = 0; + vrLen = 826; + vrLoc = 3475; + }; + EC9A8E501124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E511124C04A0046F5EC /* ifaddrs.h */; + name = "ifaddrs.h: 13"; + rLen = 0; + rLoc = 479; + rType = 0; + vrLen = 1762; + vrLoc = 153; + }; + EC9A8E511124C04A0046F5EC /* ifaddrs.h */ = { + isa = PBXFileReference; + name = ifaddrs.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/ifaddrs.h; + sourceTree = ""; + }; + EC9A8E521124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D8F1124B8160046F5EC /* tnet_types.h */; + name = "tnet_types.h: 49"; + rLen = 0; + rLoc = 1301; + rType = 0; + vrLen = 882; + vrLoc = 639; + }; + EC9A8E531124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */; + name = "tnet_turn_attribute.c: 589"; + rLen = 51; + rLoc = 14902; + rType = 0; + vrLen = 1234; + vrLoc = 14290; + }; + EC9A8E541124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4F1124B8160046F5EC /* tnet_dhcp6_duid.c */; + name = "tnet_dhcp6_duid.c: 73"; + rLen = 0; + rLoc = 1968; + rType = 0; + vrLen = 784; + vrLoc = 1477; + }; + EC9A8E551124C04A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D511124B8160046F5EC /* tnet_dhcp6_message.c */; + name = "tnet_dhcp6_message.c: 34"; + rLen = 0; + rLoc = 1047; + rType = 0; + vrLen = 1355; + vrLoc = 0; + }; + EC9A8E5A1124C3670046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E291124BB6C0046F5EC /* if.h */; + name = "if.h: 253"; + rLen = 15; + rLoc = 9384; + rType = 0; + vrLen = 1194; + vrLoc = 8602; + }; + EC9A8E5C1124C3670046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 171"; + rLen = 0; + rLoc = 3868; + rType = 0; + vrLen = 1053; + vrLoc = 3391; + }; + EC9A8E5D1124C3670046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E291124BB6C0046F5EC /* if.h */; + name = "if.h: 253"; + rLen = 15; + rLoc = 9384; + rType = 0; + vrLen = 1194; + vrLoc = 8602; + }; + EC9A8E601124C3AC0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D8F1124B8160046F5EC /* tnet_types.h */; + name = "tnet_types.h: 52"; + rLen = 0; + rLoc = 1332; + rType = 0; + vrLen = 875; + vrLoc = 639; + }; + EC9A8E621124C3AC0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D8F1124B8160046F5EC /* tnet_types.h */; + name = "tnet_types.h: 52"; + rLen = 0; + rLoc = 1332; + rType = 0; + vrLen = 875; + vrLoc = 639; + }; + EC9A8E641124C5CF0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E4B1124C04A0046F5EC /* ifaddrs.h */; + name = "ifaddrs.h: 33"; + rLen = 18; + rLoc = 1369; + rType = 0; + vrLen = 1790; + vrLoc = 0; + }; + EC9A8E671124C5CF0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 200"; + rLen = 8; + rLoc = 4815; + rType = 0; + vrLen = 1156; + vrLoc = 3923; + }; + EC9A8E681124C5CF0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8E4B1124C04A0046F5EC /* ifaddrs.h */; + name = "ifaddrs.h: 33"; + rLen = 18; + rLoc = 1369; + rType = 0; + vrLen = 1790; + vrLoc = 0; + }; + EC9A8E691124C5CF0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 185"; + rLen = 0; + rLoc = 4190; + rType = 0; + vrLen = 1108; + vrLoc = 4160; + }; + EC9A8E6D1124C62F0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */; + name = "tnet_dhcp6.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1573; + vrLoc = 1877; + }; + EC9A8E761124C78C0046F5EC /* test_ifaces.h:70 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = EC9A8CD01124B74C0046F5EC /* test_ifaces.h */; + functionName = "test_ifaces()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 70; + location = test; + modificationTime = 287625823.93763; + state = 1; + }; + EC9A8E7F1124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */; + name = "tnet_dhcp6.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1416; + vrLoc = 1529; + }; + EC9A8E801124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D791124B8160046F5EC /* tnet_stun.h */; + name = "tnet_stun.h: 26"; + rLen = 0; + rLoc = 945; + rType = 0; + vrLen = 1557; + vrLoc = 294; + }; + EC9A8E821124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE8D56310FBE7FD00B2464F /* socket.h */; + name = "socket.h: 254"; + rLen = 48; + rLoc = 9939; + rType = 0; + vrLen = 2407; + vrLoc = 8956; + }; + EC9A8E851124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 159"; + rLen = 0; + rLoc = 3672; + rType = 0; + vrLen = 975; + vrLoc = 3421; + }; + EC9A8E861124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */; + name = "tnet_dhcp6.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1416; + vrLoc = 1529; + }; + EC9A8E871124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 171"; + rLen = 0; + rLoc = 3924; + rType = 0; + vrLen = 1012; + vrLoc = 3475; + }; + EC9A8E881124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */; + name = "tnet_dhcp6.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1416; + vrLoc = 1529; + }; + EC9A8E891124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 164"; + rLen = 0; + rLoc = 3731; + rType = 0; + vrLen = 1096; + vrLoc = 3391; + }; + EC9A8E8A1124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; + name = "test.c: 96"; + rLen = 11; + rLoc = 2037; + rType = 0; + vrLen = 659; + vrLoc = 1576; + }; + EC9A8E8B1124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8CD01124B74C0046F5EC /* test_ifaces.h */; + name = "test_ifaces.h: 70"; + rLen = 0; + rLoc = 1808; + rType = 0; + vrLen = 1027; + vrLoc = 852; + }; + EC9A8E8C1124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D791124B8160046F5EC /* tnet_stun.h */; + name = "tnet_stun.h: 26"; + rLen = 0; + rLoc = 945; + rType = 0; + vrLen = 1557; + vrLoc = 294; + }; + EC9A8E8D1124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; + name = "test.c: 65"; + rLen = 0; + rLoc = 1638; + rType = 0; + vrLen = 663; + vrLoc = 1639; + }; + EC9A8E8E1124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8CD01124B74C0046F5EC /* test_ifaces.h */; + name = "test_ifaces.h: 70"; + rLen = 0; + rLoc = 1781; + rType = 0; + vrLen = 1124; + vrLoc = 755; + }; + EC9A8E8F1124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 170"; + rLen = 7; + rLoc = 3902; + rType = 0; + vrLen = 1264; + vrLoc = 3428; + }; + EC9A8E901124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE8D56310FBE7FD00B2464F /* socket.h */; + name = "socket.h: 254"; + rLen = 48; + rLoc = 9939; + rType = 0; + vrLen = 2407; + vrLoc = 8956; + }; + EC9A8E911124C8880046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 202"; + rLen = 0; + rLoc = 4892; + rType = 0; + vrLen = 1214; + vrLoc = 5552; + }; + EC9A8E9A1124C8EE0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8CD01124B74C0046F5EC /* test_ifaces.h */; + name = "test_ifaces.h: 33"; + rLen = 0; + rLoc = 1072; + rType = 0; + vrLen = 1127; + vrLoc = 752; + }; + EC9A8E9B1124C8EE0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8CD01124B74C0046F5EC /* test_ifaces.h */; + name = "test_ifaces.h: 33"; + rLen = 0; + rLoc = 1072; + rType = 0; + vrLen = 1127; + vrLoc = 752; + }; + EC9A8EA81124C99E0046F5EC /* tnet_dns.c:184 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + functionName = "tnet_dns_resolve()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 184; + location = libtinyNET.dylib; + modificationTime = 287625822.394541; + state = 1; + }; + EC9A8EAC1124C9B10046F5EC /* tnet_dns.c:162 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + functionName = "tnet_dns_resolve()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 162; + location = libtinyNET.dylib; + modificationTime = 287625822.394606; + state = 1; + }; + EC9A8EB11124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BA3010EF6D8500B7EDDD /* tsk_object.c */; + name = "tsk_object.c: 61"; + rLen = 0; + rLoc = 1626; + rType = 0; + vrLen = 859; + vrLoc = 1088; + }; + EC9A8EB21124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8CCF1124B74C0046F5EC /* test_dns.h */; + name = "test_dns.h: 69"; + rLen = 0; + rLoc = 1899; + rType = 0; + vrLen = 867; + vrLoc = 1344; + }; + EC9A8EB51124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; + name = "test.c: 58"; + rLen = 0; + rLoc = 1521; + rType = 0; + vrLen = 753; + vrLoc = 1009; + }; + EC9A8EB61124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 406"; + rLen = 0; + rLoc = 9980; + rType = 0; + vrLen = 1313; + vrLoc = 9767; + }; + EC9A8EB71124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 492"; + rLen = 0; + rLoc = 12613; + rType = 0; + vrLen = 987; + vrLoc = 12008; + }; + EC9A8EB81124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BA3010EF6D8500B7EDDD /* tsk_object.c */; + name = "tsk_object.c: 61"; + rLen = 0; + rLoc = 1626; + rType = 0; + vrLen = 859; + vrLoc = 1088; + }; + EC9A8EB91124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8CCF1124B74C0046F5EC /* test_dns.h */; + name = "test_dns.h: 69"; + rLen = 0; + rLoc = 1899; + rType = 0; + vrLen = 867; + vrLoc = 1344; + }; + EC9A8EBA1124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 160"; + rLen = 0; + rLoc = 4699; + rType = 0; + vrLen = 1231; + vrLoc = 3900; + }; + EC9A8EBB1124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 415"; + rLen = 0; + rLoc = 10000; + rType = 0; + vrLen = 1257; + vrLoc = 9826; + }; + EC9A8EBC1124CA190046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 310"; + rLen = 0; + rLoc = 8350; + rType = 0; + vrLen = 987; + vrLoc = 8166; + }; + EC9A8EC01124CA580046F5EC /* tnet_dns.c:138 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + functionName = "tnet_dns_resolve()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 138; + location = libtinyNET.dylib; + modificationTime = 287625822.394663; + state = 1; + }; + EC9A8EC51124CA9A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; + name = "test.c: 55"; + rLen = 0; + rLoc = 1476; + rType = 0; + vrLen = 762; + vrLoc = 1060; + }; + EC9A8EC71124CA9A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 400"; + rLen = 0; + rLoc = 9933; + rType = 0; + vrLen = 1258; + vrLoc = 7090; + }; + EC9A8EC81124CA9A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 133"; + rLen = 0; + rLoc = 3893; + rType = 0; + vrLen = 1278; + vrLoc = 3535; + }; + EC9A8EC91124CA9A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 415"; + rLen = 0; + rLoc = 10000; + rType = 0; + vrLen = 1398; + vrLoc = 9876; + }; + EC9A8ECA1124CA9A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 138"; + rLen = 0; + rLoc = 3913; + rType = 0; + vrLen = 1285; + vrLoc = 3535; + }; + EC9A8ECB1124CA9A0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; + name = "test.c: 55"; + rLen = 0; + rLoc = 1476; + rType = 0; + vrLen = 762; + vrLoc = 1060; + }; + EC9A8ED31124CAF70046F5EC /* tnet_dhcp.c:68 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + functionName = "tnet_dhcp_send_request()"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 68; + location = libtinyNET.dylib; + modificationTime = 287625823.871996; + state = 1; + }; + EC9A8ED61124CB1F0046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 209"; + rLen = 0; + rLoc = 4996; + rType = 0; + vrLen = 1058; + vrLoc = 4396; + }; + EC9A8EDF1124CBE00046F5EC /* tnet_socket.c:189 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + functionName = "tnet_socket_create()"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 189; + location = libtinyNET.dylib; + modificationTime = 287625826.707421; + state = 1; + }; + EC9A8EE01124CBF10046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BA2210EF6D8500B7EDDD /* tsk_errno.h */; + name = "tsk_errno.h: 39"; + rLen = 0; + rLoc = 1028; + rType = 0; + vrLen = 1026; + vrLoc = 885; + }; + EC9A8EE31124CBF10046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2303; + rType = 0; + vrLen = 1037; + vrLoc = 1818; + }; + EC9A8EE41124CBF10046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 75"; + rLen = 0; + rLoc = 1818; + rType = 0; + vrLen = 1001; + vrLoc = 4944; + }; + EC9A8EE51124CBF10046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ECE5BA2210EF6D8500B7EDDD /* tsk_errno.h */; + name = "tsk_errno.h: 39"; + rLen = 0; + rLoc = 1028; + rType = 0; + vrLen = 1026; + vrLoc = 885; + }; + EC9A8EE61124CBF10046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 75"; + rLen = 0; + rLoc = 1818; + rType = 0; + vrLen = 996; + vrLoc = 4944; + }; + EC9A8EE71124CBF10046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2227; + rType = 0; + vrLen = 1037; + vrLoc = 1818; + }; + EC9A8EFD1124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D571124B8160046F5EC /* tnet_dns.h */; + name = "tnet_dns.h: 54"; + rLen = 0; + rLoc = 1720; + rType = 0; + vrLen = 1459; + vrLoc = 1835; + }; + EC9A8EFE1124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 50"; + rLen = 0; + rLoc = 1777; + rType = 0; + vrLen = 1190; + vrLoc = 3636; + }; + EC9A8F021124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 184"; + rLen = 0; + rLoc = 5028; + rType = 0; + vrLen = 926; + vrLoc = 899; + }; + EC9A8F031124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D571124B8160046F5EC /* tnet_dns.h */; + name = "tnet_dns.h: 54"; + rLen = 0; + rLoc = 1720; + rType = 0; + vrLen = 1415; + vrLoc = 1083; + }; + EC9A8F041124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 138"; + rLen = 0; + rLoc = 3913; + rType = 0; + vrLen = 1337; + vrLoc = 1210; + }; + EC9A8F051124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2227; + rType = 0; + vrLen = 1066; + vrLoc = 1773; + }; + EC9A8F061124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D571124B8160046F5EC /* tnet_dns.h */; + name = "tnet_dns.h: 54"; + rLen = 0; + rLoc = 1720; + rType = 0; + vrLen = 1459; + vrLoc = 1835; + }; + EC9A8F071124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; + name = "tnet_dns.c: 50"; + rLen = 0; + rLoc = 1777; + rType = 0; + vrLen = 1190; + vrLoc = 3636; + }; + EC9A8F081124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2227; + rType = 0; + vrLen = 1066; + vrLoc = 1773; + }; + EC9A8F091124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 189"; + rLen = 0; + rLoc = 5065; + rType = 0; + vrLen = 1267; + vrLoc = 4329; + }; + EC9A8F0A1124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2227; + rType = 0; + vrLen = 1308; + vrLoc = 1134; + }; + EC9A8F0B1124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D451124B8160046F5EC /* tnet_dhcp.h */; + name = "tnet_dhcp.h: 53"; + rLen = 0; + rLoc = 1731; + rType = 0; + vrLen = 1277; + vrLoc = 1294; + }; + EC9A8F0C1124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2227; + rType = 0; + vrLen = 1308; + vrLoc = 1134; + }; + EC9A8F0D1124CE400046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 189"; + rLen = 0; + rLoc = 5065; + rType = 0; + vrLen = 1238; + vrLoc = 4358; + }; + EC9A8F121124CE950046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 34"; + rLen = 0; + rLoc = 1238; + rType = 0; + vrLen = 1326; + vrLoc = 1134; + }; + EC9A8F171124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D451124B8160046F5EC /* tnet_dhcp.h */; + name = "tnet_dhcp.h: 66"; + rLen = 0; + rLoc = 2099; + rType = 0; + vrLen = 1331; + vrLoc = 1269; + }; + EC9A8F181124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 53"; + rLen = 0; + rLoc = 1325; + rType = 0; + vrLen = 722; + vrLoc = 957; + }; + EC9A8F191124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8F1A1124D2690046F5EC /* errno.h */; + name = "errno.h: 86"; + rLen = 0; + rLoc = 3994; + rType = 0; + vrLen = 1641; + vrLoc = 3676; + }; + EC9A8F1A1124D2690046F5EC /* errno.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = errno.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/sys/errno.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 3584}}"; + sepNavSelRange = "{4356, 6}"; + sepNavVisRange = "{3662, 1655}"; + }; + }; + EC9A8F1B1124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2227; + rType = 0; + vrLen = 1317; + vrLoc = 1139; + }; + EC9A8F1D1124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D451124B8160046F5EC /* tnet_dhcp.h */; + name = "tnet_dhcp.h: 66"; + rLen = 0; + rLoc = 2099; + rType = 0; + vrLen = 1331; + vrLoc = 1269; + }; + EC9A8F1E1124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 65"; + rLen = 5; + rLoc = 2218; + rType = 0; + vrLen = 1331; + vrLoc = 1134; + }; + EC9A8F1F1124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8F201124D2690046F5EC /* errno.h */; + name = "errno.h: 175"; + rLen = 12; + rLoc = 8148; + rType = 0; + vrLen = 1874; + vrLoc = 7804; + }; + EC9A8F201124D2690046F5EC /* errno.h */ = { + isa = PBXFileReference; + name = errno.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/sys/errno.h; + sourceTree = ""; + }; + EC9A8F211124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 65"; + rLen = 0; + rLoc = 2218; + rType = 0; + vrLen = 1322; + vrLoc = 1134; + }; + EC9A8F221124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 189"; + rLen = 0; + rLoc = 5065; + rType = 0; + vrLen = 1238; + vrLoc = 4358; + }; + EC9A8F231124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; + name = "tnet_utils.c: 53"; + rLen = 0; + rLoc = 1325; + rType = 0; + vrLen = 722; + vrLoc = 957; + }; + EC9A8F241124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8F251124D2690046F5EC /* errno.h */; + name = "errno.h: 86"; + rLen = 0; + rLoc = 3994; + rType = 0; + vrLen = 1641; + vrLoc = 3676; + }; + EC9A8F251124D2690046F5EC /* errno.h */ = { + isa = PBXFileReference; + name = errno.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/sys/errno.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 3584}}"; + sepNavSelRange = "{4297, 0}"; + sepNavVisRange = "{3662, 1655}"; + }; + }; + EC9A8F261124D2690046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; + name = "tnet_dhcp.c: 68"; + rLen = 0; + rLoc = 2227; + rType = 0; + vrLen = 1317; + vrLoc = 1139; + }; + EC9A8F281124D4490046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 168"; + rLen = 0; + rLoc = 4371; + rType = 0; + vrLen = 1287; + vrLoc = 4358; + }; + EC9A8F291124D4490046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; + name = "tnet_socket.c: 168"; + rLen = 0; + rLoc = 4371; + rType = 0; + vrLen = 1287; + vrLoc = 4358; + }; + EC9A8F2B1124D4E90046F5EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = EC9A8F2C1124D4E90046F5EC /* errno.h */; + name = "errno.h: 93"; + rLen = 0; + rLoc = 4297; + rType = 0; + vrLen = 1655; + vrLoc = 3662; + }; + EC9A8F2C1124D4E90046F5EC /* errno.h */ = { + isa = PBXFileReference; + name = errno.h; + path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/sys/errno.h; + sourceTree = ""; + }; ECE5B90410EF65C200B7EDDD /* Source Control */ = { isa = PBXSourceControlManager; fallbackIsa = XCSourceControlManager; @@ -339,13 +2214,6 @@ sepNavVisRange = "{1417, 1166}"; }; }; - ECE5B90710EF65EF00B7EDDD /* tnet.c */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1498, 1526}}"; - sepNavSelRange = "{1441, 0}"; - sepNavVisRange = "{1606, 812}"; - }; - }; ECE5B90810EF65EF00B7EDDD /* tnet.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1323, 710}}"; @@ -361,10 +2229,16 @@ }; }; ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.c; + name = tnet_socket.c; + path = /Users/diopmamadou/Documents/doubango/tinyNET/src/tnet_socket.c; + sourceTree = ""; uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1396, 3752}}"; - sepNavSelRange = "{1674, 0}"; - sepNavVisRange = "{1416, 1183}"; + sepNavIntBoundsRect = "{{0, 0}, {1320, 3864}}"; + sepNavSelRange = "{5028, 0}"; + sepNavVisRange = "{1082, 470}"; }; }; ECE5B90E10EF65EF00B7EDDD /* tnet_socket.h */ = { @@ -375,6 +2249,12 @@ }; }; ECE5B90F10EF65EF00B7EDDD /* tnet_transport.c */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.c; + name = tnet_transport.c; + path = /Users/diopmamadou/Documents/doubango/tinyNET/src/tnet_transport.c; + sourceTree = ""; uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1705, 3486}}"; sepNavSelRange = "{3584, 0}"; @@ -389,6 +2269,12 @@ }; }; ECE5B91110EF65EF00B7EDDD /* tnet_transport_poll.c */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.c; + name = tnet_transport_poll.c; + path = /Users/diopmamadou/Documents/doubango/tinyNET/src/tnet_transport_poll.c; + sourceTree = ""; uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1859, 6412}}"; sepNavSelRange = "{6282, 0}"; @@ -396,6 +2282,12 @@ }; }; ECE5B91210EF65EF00B7EDDD /* tnet_transport_win32.c */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.c; + name = tnet_transport_win32.c; + path = /Users/diopmamadou/Documents/doubango/tinyNET/src/tnet_transport_win32.c; + sourceTree = ""; uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1652, 8120}}"; sepNavSelRange = "{8035, 8}"; @@ -404,12 +2296,18 @@ }; ECE5B91310EF65EF00B7EDDD /* tnet_types.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1396, 1232}}"; - sepNavSelRange = "{1377, 0}"; - sepNavVisRange = "{885, 972}"; + sepNavIntBoundsRect = "{{0, 0}, {1652, 1400}}"; + sepNavSelRange = "{2366, 0}"; + sepNavVisRange = "{639, 885}"; }; }; ECE5B91410EF65EF00B7EDDD /* tnet_utils.c */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.c; + name = tnet_utils.c; + path = /Users/diopmamadou/Documents/doubango/tinyNET/src/tnet_utils.c; + sourceTree = ""; uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {945, 5166}}"; sepNavSelRange = "{8765, 5}"; @@ -440,6 +2338,13 @@ sepNavVisRange = "{738, 1520}"; }; }; + ECE5BA2210EF6D8500B7EDDD /* tsk_errno.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1113, 1316}}"; + sepNavSelRange = "{1028, 0}"; + sepNavVisRange = "{885, 1026}"; + }; + }; ECE5BA2510EF6D8500B7EDDD /* tsk_hmac.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {834, 3514}}"; @@ -463,9 +2368,9 @@ }; ECE5BA3010EF6D8500B7EDDD /* tsk_object.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1323, 2058}}"; - sepNavSelRange = "{1480, 0}"; - sepNavVisRange = "{903, 1047}"; + sepNavIntBoundsRect = "{{0, 0}, {1113, 2282}}"; + sepNavSelRange = "{1626, 0}"; + sepNavVisRange = "{1088, 859}"; }; }; ECE5BA3B10EF6D8500B7EDDD /* tsk_semaphore.h */ = { @@ -540,9 +2445,9 @@ }; ECE5BAAA10EF6E4800B7EDDD /* test.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1365, 1120}}"; - sepNavSelRange = "{1175, 0}"; - sepNavVisRange = "{1005, 509}"; + sepNavIntBoundsRect = "{{0, 0}, {1113, 1596}}"; + sepNavSelRange = "{1476, 0}"; + sepNavVisRange = "{1060, 762}"; }; }; ECE5BAAB10EF6E4800B7EDDD /* test.vcproj */ = { @@ -584,16 +2489,6 @@ vrLen = 798; vrLoc = 0; }; - ECE8D4FC10FBD85A00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 38"; - rLen = 0; - rLoc = 1004; - rType = 0; - vrLen = 978; - vrLoc = 0; - }; ECE8D4FD10FBD85A00B2464F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = ECE5BAAB10EF6E4800B7EDDD /* test.vcproj */; @@ -604,26 +2499,6 @@ vrLen = 798; vrLoc = 0; }; - ECE8D4FE10FBD85A00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 39"; - rLen = 0; - rLoc = 1033; - rType = 0; - vrLen = 583; - vrLoc = 795; - }; - ECE8D4FF10FBD85A00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 162"; - rLen = 0; - rLoc = 4369; - rType = 0; - vrLen = 666; - vrLoc = 4043; - }; ECE8D50E10FBD90900B2464F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = ECE5BAAD10EF6E4800B7EDDD /* test_sockets.h */; @@ -634,76 +2509,6 @@ vrLen = 836; vrLoc = 655; }; - ECE8D51010FBD90900B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 49"; - rLen = 0; - rLoc = 1175; - rType = 0; - vrLen = 494; - vrLoc = 1005; - }; - ECE8D51110FBD90900B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAD10EF6E4800B7EDDD /* test_sockets.h */; - name = "test_sockets.h: 29"; - rLen = 0; - rLoc = 889; - rType = 0; - vrLen = 836; - vrLoc = 655; - }; - ECE8D51210FBD90900B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 162"; - rLen = 0; - rLoc = 4369; - rType = 0; - vrLen = 687; - vrLoc = 4022; - }; - ECE8D51310FBD90900B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAD10EF6E4800B7EDDD /* test_sockets.h */; - name = "test_sockets.h: 34"; - rLen = 0; - rLoc = 1048; - rType = 0; - vrLen = 836; - vrLoc = 655; - }; - ECE8D51C10FBD95D00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 140"; - rLen = 0; - rLoc = 3825; - rType = 0; - vrLen = 992; - vrLoc = 3144; - }; - ECE8D52610FBD9AE00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 64"; - rLen = 0; - rLoc = 1377; - rType = 0; - vrLen = 494; - vrLoc = 1005; - }; - ECE8D52710FBD9AE00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 140"; - rLen = 0; - rLoc = 3748; - rType = 0; - vrLen = 1011; - vrLoc = 3142; - }; ECE8D52D10FBD9DE00B2464F /* test_transport.h:139 */ = { isa = PBXFileBreakpoint; actions = ( @@ -714,43 +2519,13 @@ delayBeforeContinue = 0; fileReference = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; functionName = "test_transport_udp_ipv4(tnet_transport_handle_t *transport)"; - hitCount = 1; + hitCount = 0; ignoreCount = 0; lineNumber = 139; location = test; - modificationTime = 284943908.575198; + modificationTime = 287625823.937434; state = 1; }; - ECE8D53010FBD9E600B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 49"; - rLen = 0; - rLoc = 1175; - rType = 0; - vrLen = 382; - vrLoc = 1132; - }; - ECE8D53110FBD9E600B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 140"; - rLen = 0; - rLoc = 3748; - rType = 0; - vrLen = 1009; - vrLoc = 3144; - }; - ECE8D53210FBD9E600B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 64"; - rLen = 0; - rLoc = 1358; - rType = 0; - vrLen = 393; - vrLoc = 1121; - }; ECE8D53810FBDA7B00B2464F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = ECE5B90E10EF65EF00B7EDDD /* tnet_socket.h */; @@ -777,11 +2552,6 @@ name = in6.h; path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/netinet6/in6.h; sourceTree = ""; - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1572, 6804}}"; - sepNavSelRange = "{5785, 28}"; - sepNavVisRange = "{5582, 532}"; - }; }; ECE8D54510FBE5D100B2464F /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -803,56 +2573,6 @@ vrLen = 1326; vrLoc = 5003; }; - ECE8D54910FBE5D100B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 140"; - rLen = 0; - rLoc = 3741; - rType = 0; - vrLen = 1038; - vrLoc = 3402; - }; - ECE8D54A10FBE5D100B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 49"; - rLen = 0; - rLoc = 1175; - rType = 0; - vrLen = 480; - vrLoc = 1034; - }; - ECE8D54F10FBE62700B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 49"; - rLen = 0; - rLoc = 1175; - rType = 0; - vrLen = 509; - vrLoc = 1005; - }; - ECE8D55110FBE62700B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 24"; - rLen = 0; - rLoc = 861; - rType = 0; - vrLen = 1435; - vrLoc = 0; - }; - ECE8D55210FBE62700B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAA10EF6E4800B7EDDD /* test.c */; - name = "test.c: 49"; - rLen = 0; - rLoc = 1175; - rType = 0; - vrLen = 509; - vrLoc = 1005; - }; ECE8D55710FBE7FD00B2464F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; @@ -875,46 +2595,11 @@ }; ECE8D55910FBE7FD00B2464F /* in.h */ = { isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = in.h; path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/netinet/in.h; sourceTree = ""; }; - ECE8D55A10FBE7FD00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE8D55B10FBE7FD00B2464F /* socket.h */; - name = "socket.h: 138"; - rLen = 44; - rLoc = 4914; - rType = 0; - vrLen = 2230; - vrLoc = 0; - }; - ECE8D55B10FBE7FD00B2464F /* socket.h */ = { - isa = PBXFileReference; - name = socket.h; - path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/sys/socket.h; - sourceTree = ""; - }; - ECE8D55D10FBE7FD00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5BAAE10EF6E4800B7EDDD /* test_transport.h */; - name = "test_transport.h: 137"; - rLen = 0; - rLoc = 3642; - rType = 0; - vrLen = 1025; - vrLoc = 1014; - }; - ECE8D55E10FBE7FD00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */; - name = "tnet_socket.c: 77"; - rLen = 11; - rLoc = 2065; - rType = 0; - vrLen = 1186; - vrLoc = 1413; - }; ECE8D55F10FBE7FD00B2464F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = ECE8D56010FBE7FD00B2464F /* in.h */; @@ -927,20 +2612,11 @@ }; ECE8D56010FBE7FD00B2464F /* in.h */ = { isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = in.h; path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/netinet/in.h; sourceTree = ""; }; - ECE8D56110FBE7FD00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */; - name = "tnet_socket.c: 76"; - rLen = 10; - rLoc = 1976; - rType = 0; - vrLen = 1183; - vrLoc = 1416; - }; ECE8D56210FBE7FD00B2464F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = ECE8D56310FBE7FD00B2464F /* socket.h */; @@ -953,57 +2629,15 @@ }; ECE8D56310FBE7FD00B2464F /* socket.h */ = { isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; name = socket.h; path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/sys/socket.h; sourceTree = ""; - }; - ECE8D56710FBE8F100B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */; - name = "tnet_socket.c: 66"; - rLen = 0; - rLoc = 1674; - rType = 0; - vrLen = 1183; - vrLoc = 1416; - }; - ECE8D56810FBE8F100B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - comments = "error: netinet/sctp.h: No such file or directory"; - fRef = ECE5B91310EF65EF00B7EDDD /* tnet_types.h */; - rLen = 1; - rLoc = 52; - rType = 1; - }; - ECE8D56910FBE8F100B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */; - name = "tnet_socket.c: 66"; - rLen = 0; - rLoc = 1674; - rType = 0; - vrLen = 1183; - vrLoc = 1416; - }; - ECE8D56E10FBEDEA00B2464F /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5B91310EF65EF00B7EDDD /* tnet_types.h */; - name = "tnet_types.h: 55"; - rLen = 0; - rLoc = 1377; - rType = 0; - vrLen = 972; - vrLoc = 885; - }; - ECED600210F96CF8006B4DC9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5B90710EF65EF00B7EDDD /* tnet.c */; - name = "tnet.c: 50"; - rLen = 0; - rLoc = 1441; - rType = 0; - vrLen = 812; - vrLoc = 1606; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1652, 7686}}"; + sepNavSelRange = "{9939, 48}"; + sepNavVisRange = "{8956, 2407}"; + }; }; ECED600610F96CF8006B4DC9 /* PBXTextBookmark */ = { isa = PBXTextBookmark; @@ -1035,16 +2669,6 @@ vrLen = 610; vrLoc = 776; }; - ECED600A10F96CF8006B4DC9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ECE5B90710EF65EF00B7EDDD /* tnet.c */; - name = "tnet.c: 50"; - rLen = 0; - rLoc = 1441; - rType = 0; - vrLen = 812; - vrLoc = 1606; - }; ECED600C10F96CF8006B4DC9 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = ECE5BAAD10EF6E4800B7EDDD /* test_sockets.h */; @@ -1109,7 +2733,7 @@ ignoreCount = 0; lineNumber = 86; location = libtinyNET.dylib; - modificationTime = 284943905.003255; + modificationTime = 287625823.767475; state = 1; }; ECED608610F9774A006B4DC9 /* PBXTextBookmark */ = { @@ -1137,7 +2761,7 @@ fRef = ECE5B91310EF65EF00B7EDDD /* tnet_types.h */; name = "tnet_types.h: 45"; rLen = 0; - rLoc = 1262; + rLoc = 1283; rType = 0; vrLen = 993; vrLoc = 936; @@ -1156,7 +2780,7 @@ ignoreCount = 0; lineNumber = 363; location = libtinyNET.dylib; - modificationTime = 284943903.869048; + modificationTime = 287625822.393907; state = 2; }; ECED609710F978D7006B4DC9 /* tnet_transport_poll.c:307 */ = { @@ -1173,7 +2797,7 @@ ignoreCount = 0; lineNumber = 307; location = libtinyNET.dylib; - modificationTime = 284943903.869111; + modificationTime = 287625822.39397; state = 2; }; ECED60B510F979E1006B4DC9 /* tnet_transport_poll.c:300 */ = { @@ -1190,7 +2814,7 @@ ignoreCount = 0; lineNumber = 300; location = libtinyNET.dylib; - modificationTime = 284943903.869176; + modificationTime = 287625822.394026; state = 2; }; ECED60B910F979F9006B4DC9 /* test_transport.h:179 */ = { @@ -1207,7 +2831,7 @@ ignoreCount = 0; lineNumber = 179; location = test; - modificationTime = 284943903.869241; + modificationTime = 287625822.394079; state = 2; }; ECED60C310F97A49006B4DC9 /* tnet_transport_poll.c:369 */ = { @@ -1224,7 +2848,7 @@ ignoreCount = 0; lineNumber = 369; location = libtinyNET.dylib; - modificationTime = 284943903.869322; + modificationTime = 287625822.394133; state = 2; }; ECED60C510F97A5E006B4DC9 /* tnet_transport_poll.c:450 */ = { @@ -1241,7 +2865,7 @@ ignoreCount = 0; lineNumber = 450; location = libtinyNET.dylib; - modificationTime = 284943903.86939; + modificationTime = 287625822.394187; state = 2; }; ECED60C710F97A69006B4DC9 /* tnet_transport_poll.c:366 */ = { @@ -1258,7 +2882,7 @@ ignoreCount = 0; lineNumber = 366; location = libtinyNET.dylib; - modificationTime = 284943903.869455; + modificationTime = 287625822.394256; state = 2; }; ECED60D810F97CF8006B4DC9 /* tnet_transport_poll.c:393 */ = { @@ -1275,7 +2899,7 @@ ignoreCount = 0; lineNumber = 393; location = libtinyNET.dylib; - modificationTime = 284943903.869527; + modificationTime = 287625822.394311; state = 2; }; ECED60F310F97E82006B4DC9 /* tnet_transport_poll.c:370 */ = { @@ -1292,7 +2916,7 @@ ignoreCount = 0; lineNumber = 370; location = libtinyNET.dylib; - modificationTime = 284943903.869594; + modificationTime = 287625822.394366; state = 2; }; ECED611810F98090006B4DC9 /* PBXTextBookmark */ = { diff --git a/trunk/xcode/tinyNET/tinyNET.xcodeproj/project.pbxproj b/trunk/xcode/tinyNET/tinyNET.xcodeproj/project.pbxproj index 6f4dc254..92a85a5a 100644 --- a/trunk/xcode/tinyNET/tinyNET.xcodeproj/project.pbxproj +++ b/trunk/xcode/tinyNET/tinyNET.xcodeproj/project.pbxproj @@ -7,21 +7,95 @@ objects = { /* Begin PBXBuildFile section */ + EC9A8D391124B7C90046F5EC /* tsk_ppfcs32.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D351124B7C90046F5EC /* tsk_ppfcs32.c */; }; + EC9A8D3A1124B7C90046F5EC /* tsk_ppfcs32.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D361124B7C90046F5EC /* tsk_ppfcs32.h */; }; + EC9A8D3B1124B7C90046F5EC /* tsk_uuid.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D371124B7C90046F5EC /* tsk_uuid.c */; }; + EC9A8D3C1124B7C90046F5EC /* tsk_uuid.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D381124B7C90046F5EC /* tsk_uuid.h */; }; + EC9A8D991124B8160046F5EC /* tnet_dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D441124B8160046F5EC /* tnet_dhcp.c */; }; + EC9A8D9A1124B8160046F5EC /* tnet_dhcp.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D451124B8160046F5EC /* tnet_dhcp.h */; }; + EC9A8D9B1124B8160046F5EC /* tnet_dhcp_message.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */; }; + EC9A8D9C1124B8160046F5EC /* tnet_dhcp_message.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */; }; + EC9A8D9D1124B8160046F5EC /* tnet_dhcp_option.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D481124B8160046F5EC /* tnet_dhcp_option.c */; }; + EC9A8D9E1124B8160046F5EC /* tnet_dhcp_option.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D491124B8160046F5EC /* tnet_dhcp_option.h */; }; + EC9A8D9F1124B8160046F5EC /* tnet_dhcp_option_sip.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D4A1124B8160046F5EC /* tnet_dhcp_option_sip.c */; }; + EC9A8DA01124B8160046F5EC /* tnet_dhcp_option_sip.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D4B1124B8160046F5EC /* tnet_dhcp_option_sip.h */; }; + EC9A8DA11124B8160046F5EC /* tnet_dhcp6.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */; }; + EC9A8DA21124B8160046F5EC /* tnet_dhcp6.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D4E1124B8160046F5EC /* tnet_dhcp6.h */; }; + EC9A8DA31124B8160046F5EC /* tnet_dhcp6_duid.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D4F1124B8160046F5EC /* tnet_dhcp6_duid.c */; }; + EC9A8DA41124B8160046F5EC /* tnet_dhcp6_duid.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D501124B8160046F5EC /* tnet_dhcp6_duid.h */; }; + EC9A8DA51124B8160046F5EC /* tnet_dhcp6_message.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D511124B8160046F5EC /* tnet_dhcp6_message.c */; }; + EC9A8DA61124B8160046F5EC /* tnet_dhcp6_message.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D521124B8160046F5EC /* tnet_dhcp6_message.h */; }; + EC9A8DA71124B8160046F5EC /* tnet_dhcp6_option.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D531124B8160046F5EC /* tnet_dhcp6_option.c */; }; + EC9A8DA81124B8160046F5EC /* tnet_dhcp6_option.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D541124B8160046F5EC /* tnet_dhcp6_option.h */; }; + EC9A8DA91124B8160046F5EC /* tnet_dns.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D561124B8160046F5EC /* tnet_dns.c */; }; + EC9A8DAA1124B8160046F5EC /* tnet_dns.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D571124B8160046F5EC /* tnet_dns.h */; }; + EC9A8DAB1124B8160046F5EC /* tnet_dns_a.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D581124B8160046F5EC /* tnet_dns_a.c */; }; + EC9A8DAC1124B8160046F5EC /* tnet_dns_a.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D591124B8160046F5EC /* tnet_dns_a.h */; }; + EC9A8DAD1124B8160046F5EC /* tnet_dns_aaaa.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D5A1124B8160046F5EC /* tnet_dns_aaaa.c */; }; + EC9A8DAE1124B8160046F5EC /* tnet_dns_aaaa.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D5B1124B8160046F5EC /* tnet_dns_aaaa.h */; }; + EC9A8DAF1124B8160046F5EC /* tnet_dns_cname.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D5C1124B8160046F5EC /* tnet_dns_cname.c */; }; + EC9A8DB01124B8160046F5EC /* tnet_dns_cname.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D5D1124B8160046F5EC /* tnet_dns_cname.h */; }; + EC9A8DB11124B8160046F5EC /* tnet_dns_message.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D5E1124B8160046F5EC /* tnet_dns_message.c */; }; + EC9A8DB21124B8160046F5EC /* tnet_dns_message.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D5F1124B8160046F5EC /* tnet_dns_message.h */; }; + EC9A8DB31124B8160046F5EC /* tnet_dns_mx.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D601124B8160046F5EC /* tnet_dns_mx.c */; }; + EC9A8DB41124B8160046F5EC /* tnet_dns_mx.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D611124B8160046F5EC /* tnet_dns_mx.h */; }; + EC9A8DB51124B8160046F5EC /* tnet_dns_naptr.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D621124B8160046F5EC /* tnet_dns_naptr.c */; }; + EC9A8DB61124B8160046F5EC /* tnet_dns_naptr.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D631124B8160046F5EC /* tnet_dns_naptr.h */; }; + EC9A8DB71124B8160046F5EC /* tnet_dns_ns.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D641124B8160046F5EC /* tnet_dns_ns.c */; }; + EC9A8DB81124B8160046F5EC /* tnet_dns_ns.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D651124B8160046F5EC /* tnet_dns_ns.h */; }; + EC9A8DB91124B8160046F5EC /* tnet_dns_opt.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D661124B8160046F5EC /* tnet_dns_opt.c */; }; + EC9A8DBA1124B8160046F5EC /* tnet_dns_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D671124B8160046F5EC /* tnet_dns_opt.h */; }; + EC9A8DBB1124B8160046F5EC /* tnet_dns_ptr.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D681124B8160046F5EC /* tnet_dns_ptr.c */; }; + EC9A8DBC1124B8160046F5EC /* tnet_dns_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D691124B8160046F5EC /* tnet_dns_ptr.h */; }; + EC9A8DBD1124B8160046F5EC /* tnet_dns_rr.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D6A1124B8160046F5EC /* tnet_dns_rr.c */; }; + EC9A8DBE1124B8160046F5EC /* tnet_dns_rr.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D6B1124B8160046F5EC /* tnet_dns_rr.h */; }; + EC9A8DBF1124B8160046F5EC /* tnet_dns_soa.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D6C1124B8160046F5EC /* tnet_dns_soa.c */; }; + EC9A8DC01124B8160046F5EC /* tnet_dns_soa.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D6D1124B8160046F5EC /* tnet_dns_soa.h */; }; + EC9A8DC11124B8160046F5EC /* tnet_dns_srv.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D6E1124B8160046F5EC /* tnet_dns_srv.c */; }; + EC9A8DC21124B8160046F5EC /* tnet_dns_srv.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D6F1124B8160046F5EC /* tnet_dns_srv.h */; }; + EC9A8DC31124B8160046F5EC /* tnet_dns_txt.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D701124B8160046F5EC /* tnet_dns_txt.c */; }; + EC9A8DC41124B8160046F5EC /* tnet_dns_txt.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D711124B8160046F5EC /* tnet_dns_txt.h */; }; + EC9A8DC51124B8160046F5EC /* tnet_ice.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D731124B8160046F5EC /* tnet_ice.c */; }; + EC9A8DC61124B8160046F5EC /* tnet_ice.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D741124B8160046F5EC /* tnet_ice.h */; }; + EC9A8DC81124B8160046F5EC /* tnet_stun.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D781124B8160046F5EC /* tnet_stun.c */; }; + EC9A8DC91124B8160046F5EC /* tnet_stun.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D791124B8160046F5EC /* tnet_stun.h */; }; + EC9A8DCA1124B8160046F5EC /* tnet_stun_attribute.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D7A1124B8160046F5EC /* tnet_stun_attribute.c */; }; + EC9A8DCB1124B8160046F5EC /* tnet_stun_attribute.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D7B1124B8160046F5EC /* tnet_stun_attribute.h */; }; + EC9A8DCC1124B8160046F5EC /* tnet_stun_message.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D7C1124B8160046F5EC /* tnet_stun_message.c */; }; + EC9A8DCD1124B8160046F5EC /* tnet_stun_message.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D7D1124B8160046F5EC /* tnet_stun_message.h */; }; + EC9A8DCE1124B8160046F5EC /* tinyNET_config.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D7E1124B8160046F5EC /* tinyNET_config.h */; }; + EC9A8DCF1124B8160046F5EC /* tnet.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D7F1124B8160046F5EC /* tnet.c */; }; + EC9A8DD01124B8160046F5EC /* tnet.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D801124B8160046F5EC /* tnet.h */; }; + EC9A8DD11124B8160046F5EC /* tnet_auth.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D811124B8160046F5EC /* tnet_auth.c */; }; + EC9A8DD21124B8160046F5EC /* tnet_auth.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D821124B8160046F5EC /* tnet_auth.h */; }; + EC9A8DD31124B8160046F5EC /* tnet_hardwares.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D831124B8160046F5EC /* tnet_hardwares.h */; }; + EC9A8DD41124B8160046F5EC /* tnet_nat.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D841124B8160046F5EC /* tnet_nat.c */; }; + EC9A8DD51124B8160046F5EC /* tnet_nat.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D851124B8160046F5EC /* tnet_nat.h */; }; + EC9A8DD61124B8160046F5EC /* tnet_poll.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D861124B8160046F5EC /* tnet_poll.c */; }; + EC9A8DD71124B8160046F5EC /* tnet_poll.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D871124B8160046F5EC /* tnet_poll.h */; }; + EC9A8DD81124B8160046F5EC /* tnet_proto.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D881124B8160046F5EC /* tnet_proto.h */; }; + EC9A8DD91124B8160046F5EC /* tnet_socket.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D891124B8160046F5EC /* tnet_socket.c */; }; + EC9A8DDA1124B8160046F5EC /* tnet_socket.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D8A1124B8160046F5EC /* tnet_socket.h */; }; + EC9A8DDB1124B8160046F5EC /* tnet_transport.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D8B1124B8160046F5EC /* tnet_transport.c */; }; + EC9A8DDC1124B8160046F5EC /* tnet_transport.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D8C1124B8160046F5EC /* tnet_transport.h */; }; + EC9A8DDD1124B8160046F5EC /* tnet_transport_poll.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D8D1124B8160046F5EC /* tnet_transport_poll.c */; }; + EC9A8DDE1124B8160046F5EC /* tnet_transport_win32.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D8E1124B8160046F5EC /* tnet_transport_win32.c */; }; + EC9A8DDF1124B8160046F5EC /* tnet_types.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D8F1124B8160046F5EC /* tnet_types.h */; }; + EC9A8DE01124B8160046F5EC /* tnet_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D901124B8160046F5EC /* tnet_utils.c */; }; + EC9A8DE11124B8160046F5EC /* tnet_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D911124B8160046F5EC /* tnet_utils.h */; }; + EC9A8DE21124B8160046F5EC /* tnet_turn.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D931124B8160046F5EC /* tnet_turn.c */; }; + EC9A8DE31124B8160046F5EC /* tnet_turn.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D941124B8160046F5EC /* tnet_turn.h */; }; + EC9A8DE41124B8160046F5EC /* tnet_turn_attribute.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */; }; + EC9A8DE51124B8160046F5EC /* tnet_turn_attribute.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D961124B8160046F5EC /* tnet_turn_attribute.h */; }; + EC9A8DE61124B8160046F5EC /* tnet_turn_message.c in Sources */ = {isa = PBXBuildFile; fileRef = EC9A8D971124B8160046F5EC /* tnet_turn_message.c */; }; + EC9A8DE71124B8160046F5EC /* tnet_turn_message.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A8D981124B8160046F5EC /* tnet_turn_message.h */; }; ECE5B91610EF65EF00B7EDDD /* tinyNET_config.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B90610EF65EF00B7EDDD /* tinyNET_config.h */; }; - ECE5B91710EF65EF00B7EDDD /* tnet.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B90710EF65EF00B7EDDD /* tnet.c */; }; ECE5B91810EF65EF00B7EDDD /* tnet.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B90810EF65EF00B7EDDD /* tnet.h */; }; - ECE5B91910EF65EF00B7EDDD /* tnet_auth.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B90910EF65EF00B7EDDD /* tnet_auth.c */; }; ECE5B91A10EF65EF00B7EDDD /* tnet_auth.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B90A10EF65EF00B7EDDD /* tnet_auth.h */; }; - ECE5B91B10EF65EF00B7EDDD /* tnet_poll.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B90B10EF65EF00B7EDDD /* tnet_poll.c */; }; ECE5B91C10EF65EF00B7EDDD /* tnet_poll.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B90C10EF65EF00B7EDDD /* tnet_poll.h */; }; - ECE5B91D10EF65F000B7EDDD /* tnet_socket.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */; }; ECE5B91E10EF65F000B7EDDD /* tnet_socket.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B90E10EF65EF00B7EDDD /* tnet_socket.h */; }; - ECE5B91F10EF65F000B7EDDD /* tnet_transport.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B90F10EF65EF00B7EDDD /* tnet_transport.c */; }; ECE5B92010EF65F000B7EDDD /* tnet_transport.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B91010EF65EF00B7EDDD /* tnet_transport.h */; }; - ECE5B92110EF65F000B7EDDD /* tnet_transport_poll.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B91110EF65EF00B7EDDD /* tnet_transport_poll.c */; }; - ECE5B92210EF65F000B7EDDD /* tnet_transport_win32.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B91210EF65EF00B7EDDD /* tnet_transport_win32.c */; }; ECE5B92310EF65F000B7EDDD /* tnet_types.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B91310EF65EF00B7EDDD /* tnet_types.h */; }; - ECE5B92410EF65F000B7EDDD /* tnet_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5B91410EF65EF00B7EDDD /* tnet_utils.c */; }; ECE5B92510EF65F000B7EDDD /* tnet_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5B91510EF65EF00B7EDDD /* tnet_utils.h */; }; ECE5BA4A10EF6D8500B7EDDD /* tinySAK_config.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE5BA1510EF6D8500B7EDDD /* tinySAK_config.h */; }; ECE5BA4B10EF6D8500B7EDDD /* tsk.c in Sources */ = {isa = PBXBuildFile; fileRef = ECE5BA1610EF6D8500B7EDDD /* tsk.c */; }; @@ -109,21 +183,101 @@ /* Begin PBXFileReference section */ D2AAC0630554660B00DB518D /* libtinyNET.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libtinyNET.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + EC9A8CCD1124B74C0046F5EC /* test_dhcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_dhcp.h; path = ../../tinyNET/test/test_dhcp.h; sourceTree = SOURCE_ROOT; }; + EC9A8CCE1124B74C0046F5EC /* test_dhcp6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_dhcp6.h; path = ../../tinyNET/test/test_dhcp6.h; sourceTree = SOURCE_ROOT; }; + EC9A8CCF1124B74C0046F5EC /* test_dns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_dns.h; path = ../../tinyNET/test/test_dns.h; sourceTree = SOURCE_ROOT; }; + EC9A8CD01124B74C0046F5EC /* test_ifaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_ifaces.h; path = ../../tinyNET/test/test_ifaces.h; sourceTree = SOURCE_ROOT; }; + EC9A8CD11124B74C0046F5EC /* test_nat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_nat.h; path = ../../tinyNET/test/test_nat.h; sourceTree = SOURCE_ROOT; }; + EC9A8CD21124B74C0046F5EC /* test_stun.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_stun.h; path = ../../tinyNET/test/test_stun.h; sourceTree = SOURCE_ROOT; }; + EC9A8D351124B7C90046F5EC /* tsk_ppfcs32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_ppfcs32.c; path = ../../tinySAK/src/tsk_ppfcs32.c; sourceTree = SOURCE_ROOT; }; + EC9A8D361124B7C90046F5EC /* tsk_ppfcs32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_ppfcs32.h; path = ../../tinySAK/src/tsk_ppfcs32.h; sourceTree = SOURCE_ROOT; }; + EC9A8D371124B7C90046F5EC /* tsk_uuid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tsk_uuid.c; path = ../../tinySAK/src/tsk_uuid.c; sourceTree = SOURCE_ROOT; }; + EC9A8D381124B7C90046F5EC /* tsk_uuid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsk_uuid.h; path = ../../tinySAK/src/tsk_uuid.h; sourceTree = SOURCE_ROOT; }; + EC9A8D441124B8160046F5EC /* tnet_dhcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp.c; sourceTree = ""; }; + EC9A8D451124B8160046F5EC /* tnet_dhcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp.h; sourceTree = ""; }; + EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp_message.c; sourceTree = ""; }; + EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp_message.h; sourceTree = ""; }; + EC9A8D481124B8160046F5EC /* tnet_dhcp_option.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp_option.c; sourceTree = ""; }; + EC9A8D491124B8160046F5EC /* tnet_dhcp_option.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp_option.h; sourceTree = ""; }; + EC9A8D4A1124B8160046F5EC /* tnet_dhcp_option_sip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp_option_sip.c; sourceTree = ""; }; + EC9A8D4B1124B8160046F5EC /* tnet_dhcp_option_sip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp_option_sip.h; sourceTree = ""; }; + EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp6.c; sourceTree = ""; }; + EC9A8D4E1124B8160046F5EC /* tnet_dhcp6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp6.h; sourceTree = ""; }; + EC9A8D4F1124B8160046F5EC /* tnet_dhcp6_duid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp6_duid.c; sourceTree = ""; }; + EC9A8D501124B8160046F5EC /* tnet_dhcp6_duid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp6_duid.h; sourceTree = ""; }; + EC9A8D511124B8160046F5EC /* tnet_dhcp6_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp6_message.c; sourceTree = ""; }; + EC9A8D521124B8160046F5EC /* tnet_dhcp6_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp6_message.h; sourceTree = ""; }; + EC9A8D531124B8160046F5EC /* tnet_dhcp6_option.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dhcp6_option.c; sourceTree = ""; }; + EC9A8D541124B8160046F5EC /* tnet_dhcp6_option.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dhcp6_option.h; sourceTree = ""; }; + EC9A8D561124B8160046F5EC /* tnet_dns.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns.c; sourceTree = ""; }; + EC9A8D571124B8160046F5EC /* tnet_dns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns.h; sourceTree = ""; }; + EC9A8D581124B8160046F5EC /* tnet_dns_a.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_a.c; sourceTree = ""; }; + EC9A8D591124B8160046F5EC /* tnet_dns_a.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_a.h; sourceTree = ""; }; + EC9A8D5A1124B8160046F5EC /* tnet_dns_aaaa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_aaaa.c; sourceTree = ""; }; + EC9A8D5B1124B8160046F5EC /* tnet_dns_aaaa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_aaaa.h; sourceTree = ""; }; + EC9A8D5C1124B8160046F5EC /* tnet_dns_cname.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_cname.c; sourceTree = ""; }; + EC9A8D5D1124B8160046F5EC /* tnet_dns_cname.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_cname.h; sourceTree = ""; }; + EC9A8D5E1124B8160046F5EC /* tnet_dns_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_message.c; sourceTree = ""; }; + EC9A8D5F1124B8160046F5EC /* tnet_dns_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_message.h; sourceTree = ""; }; + EC9A8D601124B8160046F5EC /* tnet_dns_mx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_mx.c; sourceTree = ""; }; + EC9A8D611124B8160046F5EC /* tnet_dns_mx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_mx.h; sourceTree = ""; }; + EC9A8D621124B8160046F5EC /* tnet_dns_naptr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_naptr.c; sourceTree = ""; }; + EC9A8D631124B8160046F5EC /* tnet_dns_naptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_naptr.h; sourceTree = ""; }; + EC9A8D641124B8160046F5EC /* tnet_dns_ns.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_ns.c; sourceTree = ""; }; + EC9A8D651124B8160046F5EC /* tnet_dns_ns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_ns.h; sourceTree = ""; }; + EC9A8D661124B8160046F5EC /* tnet_dns_opt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_opt.c; sourceTree = ""; }; + EC9A8D671124B8160046F5EC /* tnet_dns_opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_opt.h; sourceTree = ""; }; + EC9A8D681124B8160046F5EC /* tnet_dns_ptr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_ptr.c; sourceTree = ""; }; + EC9A8D691124B8160046F5EC /* tnet_dns_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_ptr.h; sourceTree = ""; }; + EC9A8D6A1124B8160046F5EC /* tnet_dns_rr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_rr.c; sourceTree = ""; }; + EC9A8D6B1124B8160046F5EC /* tnet_dns_rr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_rr.h; sourceTree = ""; }; + EC9A8D6C1124B8160046F5EC /* tnet_dns_soa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_soa.c; sourceTree = ""; }; + EC9A8D6D1124B8160046F5EC /* tnet_dns_soa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_soa.h; sourceTree = ""; }; + EC9A8D6E1124B8160046F5EC /* tnet_dns_srv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_srv.c; sourceTree = ""; }; + EC9A8D6F1124B8160046F5EC /* tnet_dns_srv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_srv.h; sourceTree = ""; }; + EC9A8D701124B8160046F5EC /* tnet_dns_txt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_dns_txt.c; sourceTree = ""; }; + EC9A8D711124B8160046F5EC /* tnet_dns_txt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_dns_txt.h; sourceTree = ""; }; + EC9A8D731124B8160046F5EC /* tnet_ice.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_ice.c; sourceTree = ""; }; + EC9A8D741124B8160046F5EC /* tnet_ice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_ice.h; sourceTree = ""; }; + EC9A8D781124B8160046F5EC /* tnet_stun.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_stun.c; sourceTree = ""; }; + EC9A8D791124B8160046F5EC /* tnet_stun.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_stun.h; sourceTree = ""; }; + EC9A8D7A1124B8160046F5EC /* tnet_stun_attribute.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_stun_attribute.c; sourceTree = ""; }; + EC9A8D7B1124B8160046F5EC /* tnet_stun_attribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_stun_attribute.h; sourceTree = ""; }; + EC9A8D7C1124B8160046F5EC /* tnet_stun_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_stun_message.c; sourceTree = ""; }; + EC9A8D7D1124B8160046F5EC /* tnet_stun_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_stun_message.h; sourceTree = ""; }; + EC9A8D7E1124B8160046F5EC /* tinyNET_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyNET_config.h; sourceTree = ""; }; + EC9A8D7F1124B8160046F5EC /* tnet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet.c; sourceTree = ""; }; + EC9A8D801124B8160046F5EC /* tnet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet.h; sourceTree = ""; }; + EC9A8D811124B8160046F5EC /* tnet_auth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_auth.c; sourceTree = ""; }; + EC9A8D821124B8160046F5EC /* tnet_auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_auth.h; sourceTree = ""; }; + EC9A8D831124B8160046F5EC /* tnet_hardwares.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_hardwares.h; sourceTree = ""; }; + EC9A8D841124B8160046F5EC /* tnet_nat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_nat.c; sourceTree = ""; }; + EC9A8D851124B8160046F5EC /* tnet_nat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_nat.h; sourceTree = ""; }; + EC9A8D861124B8160046F5EC /* tnet_poll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_poll.c; sourceTree = ""; }; + EC9A8D871124B8160046F5EC /* tnet_poll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_poll.h; sourceTree = ""; }; + EC9A8D881124B8160046F5EC /* tnet_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_proto.h; sourceTree = ""; }; + EC9A8D891124B8160046F5EC /* tnet_socket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_socket.c; sourceTree = ""; }; + EC9A8D8A1124B8160046F5EC /* tnet_socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_socket.h; sourceTree = ""; }; + EC9A8D8B1124B8160046F5EC /* tnet_transport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_transport.c; sourceTree = ""; }; + EC9A8D8C1124B8160046F5EC /* tnet_transport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_transport.h; sourceTree = ""; }; + EC9A8D8D1124B8160046F5EC /* tnet_transport_poll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_transport_poll.c; sourceTree = ""; }; + EC9A8D8E1124B8160046F5EC /* tnet_transport_win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_transport_win32.c; sourceTree = ""; }; + EC9A8D8F1124B8160046F5EC /* tnet_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_types.h; sourceTree = ""; }; + EC9A8D901124B8160046F5EC /* tnet_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_utils.c; sourceTree = ""; }; + EC9A8D911124B8160046F5EC /* tnet_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_utils.h; sourceTree = ""; }; + EC9A8D931124B8160046F5EC /* tnet_turn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_turn.c; sourceTree = ""; }; + EC9A8D941124B8160046F5EC /* tnet_turn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_turn.h; sourceTree = ""; }; + EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_turn_attribute.c; sourceTree = ""; }; + EC9A8D961124B8160046F5EC /* tnet_turn_attribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_turn_attribute.h; sourceTree = ""; }; + EC9A8D971124B8160046F5EC /* tnet_turn_message.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tnet_turn_message.c; sourceTree = ""; }; + EC9A8D981124B8160046F5EC /* tnet_turn_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tnet_turn_message.h; sourceTree = ""; }; ECE5B90610EF65EF00B7EDDD /* tinyNET_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinyNET_config.h; path = ../../tinyNET/src/tinyNET_config.h; sourceTree = SOURCE_ROOT; }; - ECE5B90710EF65EF00B7EDDD /* tnet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet.c; path = ../../tinyNET/src/tnet.c; sourceTree = SOURCE_ROOT; }; ECE5B90810EF65EF00B7EDDD /* tnet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tnet.h; path = ../../tinyNET/src/tnet.h; sourceTree = SOURCE_ROOT; }; - ECE5B90910EF65EF00B7EDDD /* tnet_auth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet_auth.c; path = ../../tinyNET/src/tnet_auth.c; sourceTree = SOURCE_ROOT; }; ECE5B90A10EF65EF00B7EDDD /* tnet_auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tnet_auth.h; path = ../../tinyNET/src/tnet_auth.h; sourceTree = SOURCE_ROOT; }; - ECE5B90B10EF65EF00B7EDDD /* tnet_poll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet_poll.c; path = ../../tinyNET/src/tnet_poll.c; sourceTree = SOURCE_ROOT; }; ECE5B90C10EF65EF00B7EDDD /* tnet_poll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tnet_poll.h; path = ../../tinyNET/src/tnet_poll.h; sourceTree = SOURCE_ROOT; }; - ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet_socket.c; path = ../../tinyNET/src/tnet_socket.c; sourceTree = SOURCE_ROOT; }; ECE5B90E10EF65EF00B7EDDD /* tnet_socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tnet_socket.h; path = ../../tinyNET/src/tnet_socket.h; sourceTree = SOURCE_ROOT; }; - ECE5B90F10EF65EF00B7EDDD /* tnet_transport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet_transport.c; path = ../../tinyNET/src/tnet_transport.c; sourceTree = SOURCE_ROOT; }; ECE5B91010EF65EF00B7EDDD /* tnet_transport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tnet_transport.h; path = ../../tinyNET/src/tnet_transport.h; sourceTree = SOURCE_ROOT; }; - ECE5B91110EF65EF00B7EDDD /* tnet_transport_poll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet_transport_poll.c; path = ../../tinyNET/src/tnet_transport_poll.c; sourceTree = SOURCE_ROOT; }; - ECE5B91210EF65EF00B7EDDD /* tnet_transport_win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet_transport_win32.c; path = ../../tinyNET/src/tnet_transport_win32.c; sourceTree = SOURCE_ROOT; }; ECE5B91310EF65EF00B7EDDD /* tnet_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tnet_types.h; path = ../../tinyNET/src/tnet_types.h; sourceTree = SOURCE_ROOT; }; - ECE5B91410EF65EF00B7EDDD /* tnet_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tnet_utils.c; path = ../../tinyNET/src/tnet_utils.c; sourceTree = SOURCE_ROOT; }; ECE5B91510EF65EF00B7EDDD /* tnet_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tnet_utils.h; path = ../../tinyNET/src/tnet_utils.h; sourceTree = SOURCE_ROOT; }; ECE5B98410EF6B6F00B7EDDD /* libtinySAK.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libtinySAK.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; ECE5BA1510EF6D8500B7EDDD /* tinySAK_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinySAK_config.h; path = ../../tinySAK/src/tinySAK_config.h; sourceTree = SOURCE_ROOT; }; @@ -221,30 +375,15 @@ 08FB7794FE84155DC02AAC07 /* tinyNET */ = { isa = PBXGroup; children = ( + EC9A8D421124B8160046F5EC /* src */, ECE5BA9810EF6E0600B7EDDD /* test */, ECE5BA1410EF6D5500B7EDDD /* tinySAK */, ECE5B90310EF65C200B7EDDD /* include */, - 08FB7795FE84155DC02AAC07 /* Source */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = tinyNET; sourceTree = ""; }; - 08FB7795FE84155DC02AAC07 /* Source */ = { - isa = PBXGroup; - children = ( - ECE5B90710EF65EF00B7EDDD /* tnet.c */, - ECE5B90910EF65EF00B7EDDD /* tnet_auth.c */, - ECE5B90B10EF65EF00B7EDDD /* tnet_poll.c */, - ECE5B90D10EF65EF00B7EDDD /* tnet_socket.c */, - ECE5B90F10EF65EF00B7EDDD /* tnet_transport.c */, - ECE5B91110EF65EF00B7EDDD /* tnet_transport_poll.c */, - ECE5B91210EF65EF00B7EDDD /* tnet_transport_win32.c */, - ECE5B91410EF65EF00B7EDDD /* tnet_utils.c */, - ); - name = Source; - sourceTree = ""; - }; 1AB674ADFE9D54B511CA2CBB /* Products */ = { isa = PBXGroup; children = ( @@ -255,6 +394,148 @@ name = Products; sourceTree = ""; }; + EC9A8D421124B8160046F5EC /* src */ = { + isa = PBXGroup; + children = ( + EC9A8D431124B8160046F5EC /* dhcp */, + EC9A8D4C1124B8160046F5EC /* dhcp6 */, + EC9A8D551124B8160046F5EC /* dns */, + EC9A8D721124B8160046F5EC /* ice */, + EC9A8D761124B8160046F5EC /* parsers */, + EC9A8D771124B8160046F5EC /* stun */, + EC9A8D7E1124B8160046F5EC /* tinyNET_config.h */, + EC9A8D7F1124B8160046F5EC /* tnet.c */, + EC9A8D801124B8160046F5EC /* tnet.h */, + EC9A8D811124B8160046F5EC /* tnet_auth.c */, + EC9A8D821124B8160046F5EC /* tnet_auth.h */, + EC9A8D831124B8160046F5EC /* tnet_hardwares.h */, + EC9A8D841124B8160046F5EC /* tnet_nat.c */, + EC9A8D851124B8160046F5EC /* tnet_nat.h */, + EC9A8D861124B8160046F5EC /* tnet_poll.c */, + EC9A8D871124B8160046F5EC /* tnet_poll.h */, + EC9A8D881124B8160046F5EC /* tnet_proto.h */, + EC9A8D891124B8160046F5EC /* tnet_socket.c */, + EC9A8D8A1124B8160046F5EC /* tnet_socket.h */, + EC9A8D8B1124B8160046F5EC /* tnet_transport.c */, + EC9A8D8C1124B8160046F5EC /* tnet_transport.h */, + EC9A8D8D1124B8160046F5EC /* tnet_transport_poll.c */, + EC9A8D8E1124B8160046F5EC /* tnet_transport_win32.c */, + EC9A8D8F1124B8160046F5EC /* tnet_types.h */, + EC9A8D901124B8160046F5EC /* tnet_utils.c */, + EC9A8D911124B8160046F5EC /* tnet_utils.h */, + EC9A8D921124B8160046F5EC /* turn */, + ); + name = src; + path = ../../tinyNET/src; + sourceTree = SOURCE_ROOT; + }; + EC9A8D431124B8160046F5EC /* dhcp */ = { + isa = PBXGroup; + children = ( + EC9A8D441124B8160046F5EC /* tnet_dhcp.c */, + EC9A8D451124B8160046F5EC /* tnet_dhcp.h */, + EC9A8D461124B8160046F5EC /* tnet_dhcp_message.c */, + EC9A8D471124B8160046F5EC /* tnet_dhcp_message.h */, + EC9A8D481124B8160046F5EC /* tnet_dhcp_option.c */, + EC9A8D491124B8160046F5EC /* tnet_dhcp_option.h */, + EC9A8D4A1124B8160046F5EC /* tnet_dhcp_option_sip.c */, + EC9A8D4B1124B8160046F5EC /* tnet_dhcp_option_sip.h */, + ); + path = dhcp; + sourceTree = ""; + }; + EC9A8D4C1124B8160046F5EC /* dhcp6 */ = { + isa = PBXGroup; + children = ( + EC9A8D4D1124B8160046F5EC /* tnet_dhcp6.c */, + EC9A8D4E1124B8160046F5EC /* tnet_dhcp6.h */, + EC9A8D4F1124B8160046F5EC /* tnet_dhcp6_duid.c */, + EC9A8D501124B8160046F5EC /* tnet_dhcp6_duid.h */, + EC9A8D511124B8160046F5EC /* tnet_dhcp6_message.c */, + EC9A8D521124B8160046F5EC /* tnet_dhcp6_message.h */, + EC9A8D531124B8160046F5EC /* tnet_dhcp6_option.c */, + EC9A8D541124B8160046F5EC /* tnet_dhcp6_option.h */, + ); + path = dhcp6; + sourceTree = ""; + }; + EC9A8D551124B8160046F5EC /* dns */ = { + isa = PBXGroup; + children = ( + EC9A8D561124B8160046F5EC /* tnet_dns.c */, + EC9A8D571124B8160046F5EC /* tnet_dns.h */, + EC9A8D581124B8160046F5EC /* tnet_dns_a.c */, + EC9A8D591124B8160046F5EC /* tnet_dns_a.h */, + EC9A8D5A1124B8160046F5EC /* tnet_dns_aaaa.c */, + EC9A8D5B1124B8160046F5EC /* tnet_dns_aaaa.h */, + EC9A8D5C1124B8160046F5EC /* tnet_dns_cname.c */, + EC9A8D5D1124B8160046F5EC /* tnet_dns_cname.h */, + EC9A8D5E1124B8160046F5EC /* tnet_dns_message.c */, + EC9A8D5F1124B8160046F5EC /* tnet_dns_message.h */, + EC9A8D601124B8160046F5EC /* tnet_dns_mx.c */, + EC9A8D611124B8160046F5EC /* tnet_dns_mx.h */, + EC9A8D621124B8160046F5EC /* tnet_dns_naptr.c */, + EC9A8D631124B8160046F5EC /* tnet_dns_naptr.h */, + EC9A8D641124B8160046F5EC /* tnet_dns_ns.c */, + EC9A8D651124B8160046F5EC /* tnet_dns_ns.h */, + EC9A8D661124B8160046F5EC /* tnet_dns_opt.c */, + EC9A8D671124B8160046F5EC /* tnet_dns_opt.h */, + EC9A8D681124B8160046F5EC /* tnet_dns_ptr.c */, + EC9A8D691124B8160046F5EC /* tnet_dns_ptr.h */, + EC9A8D6A1124B8160046F5EC /* tnet_dns_rr.c */, + EC9A8D6B1124B8160046F5EC /* tnet_dns_rr.h */, + EC9A8D6C1124B8160046F5EC /* tnet_dns_soa.c */, + EC9A8D6D1124B8160046F5EC /* tnet_dns_soa.h */, + EC9A8D6E1124B8160046F5EC /* tnet_dns_srv.c */, + EC9A8D6F1124B8160046F5EC /* tnet_dns_srv.h */, + EC9A8D701124B8160046F5EC /* tnet_dns_txt.c */, + EC9A8D711124B8160046F5EC /* tnet_dns_txt.h */, + ); + path = dns; + sourceTree = ""; + }; + EC9A8D721124B8160046F5EC /* ice */ = { + isa = PBXGroup; + children = ( + EC9A8D731124B8160046F5EC /* tnet_ice.c */, + EC9A8D741124B8160046F5EC /* tnet_ice.h */, + ); + path = ice; + sourceTree = ""; + }; + EC9A8D761124B8160046F5EC /* parsers */ = { + isa = PBXGroup; + children = ( + ); + path = parsers; + sourceTree = ""; + }; + EC9A8D771124B8160046F5EC /* stun */ = { + isa = PBXGroup; + children = ( + EC9A8D781124B8160046F5EC /* tnet_stun.c */, + EC9A8D791124B8160046F5EC /* tnet_stun.h */, + EC9A8D7A1124B8160046F5EC /* tnet_stun_attribute.c */, + EC9A8D7B1124B8160046F5EC /* tnet_stun_attribute.h */, + EC9A8D7C1124B8160046F5EC /* tnet_stun_message.c */, + EC9A8D7D1124B8160046F5EC /* tnet_stun_message.h */, + ); + path = stun; + sourceTree = ""; + }; + EC9A8D921124B8160046F5EC /* turn */ = { + isa = PBXGroup; + children = ( + EC9A8D931124B8160046F5EC /* tnet_turn.c */, + EC9A8D941124B8160046F5EC /* tnet_turn.h */, + EC9A8D951124B8160046F5EC /* tnet_turn_attribute.c */, + EC9A8D961124B8160046F5EC /* tnet_turn_attribute.h */, + EC9A8D971124B8160046F5EC /* tnet_turn_message.c */, + EC9A8D981124B8160046F5EC /* tnet_turn_message.h */, + ); + path = turn; + sourceTree = ""; + }; ECE5B90310EF65C200B7EDDD /* include */ = { isa = PBXGroup; children = ( @@ -273,6 +554,10 @@ ECE5BA1410EF6D5500B7EDDD /* tinySAK */ = { isa = PBXGroup; children = ( + EC9A8D351124B7C90046F5EC /* tsk_ppfcs32.c */, + EC9A8D361124B7C90046F5EC /* tsk_ppfcs32.h */, + EC9A8D371124B7C90046F5EC /* tsk_uuid.c */, + EC9A8D381124B7C90046F5EC /* tsk_uuid.h */, ECE5BA1510EF6D8500B7EDDD /* tinySAK_config.h */, ECE5BA1610EF6D8500B7EDDD /* tsk.c */, ECE5BA1710EF6D8500B7EDDD /* tsk.h */, @@ -333,6 +618,12 @@ ECE5BA9810EF6E0600B7EDDD /* test */ = { isa = PBXGroup; children = ( + EC9A8CCD1124B74C0046F5EC /* test_dhcp.h */, + EC9A8CCE1124B74C0046F5EC /* test_dhcp6.h */, + EC9A8CCF1124B74C0046F5EC /* test_dns.h */, + EC9A8CD01124B74C0046F5EC /* test_ifaces.h */, + EC9A8CD11124B74C0046F5EC /* test_nat.h */, + EC9A8CD21124B74C0046F5EC /* test_stun.h */, ECE5BAA710EF6E4800B7EDDD /* stdafx.c */, ECE5BAA810EF6E4800B7EDDD /* stdafx.h */, ECE5BAA910EF6E4800B7EDDD /* targetver.h */, @@ -360,6 +651,46 @@ ECE5B92010EF65F000B7EDDD /* tnet_transport.h in Headers */, ECE5B92310EF65F000B7EDDD /* tnet_types.h in Headers */, ECE5B92510EF65F000B7EDDD /* tnet_utils.h in Headers */, + EC9A8D9A1124B8160046F5EC /* tnet_dhcp.h in Headers */, + EC9A8D9C1124B8160046F5EC /* tnet_dhcp_message.h in Headers */, + EC9A8D9E1124B8160046F5EC /* tnet_dhcp_option.h in Headers */, + EC9A8DA01124B8160046F5EC /* tnet_dhcp_option_sip.h in Headers */, + EC9A8DA21124B8160046F5EC /* tnet_dhcp6.h in Headers */, + EC9A8DA41124B8160046F5EC /* tnet_dhcp6_duid.h in Headers */, + EC9A8DA61124B8160046F5EC /* tnet_dhcp6_message.h in Headers */, + EC9A8DA81124B8160046F5EC /* tnet_dhcp6_option.h in Headers */, + EC9A8DAA1124B8160046F5EC /* tnet_dns.h in Headers */, + EC9A8DAC1124B8160046F5EC /* tnet_dns_a.h in Headers */, + EC9A8DAE1124B8160046F5EC /* tnet_dns_aaaa.h in Headers */, + EC9A8DB01124B8160046F5EC /* tnet_dns_cname.h in Headers */, + EC9A8DB21124B8160046F5EC /* tnet_dns_message.h in Headers */, + EC9A8DB41124B8160046F5EC /* tnet_dns_mx.h in Headers */, + EC9A8DB61124B8160046F5EC /* tnet_dns_naptr.h in Headers */, + EC9A8DB81124B8160046F5EC /* tnet_dns_ns.h in Headers */, + EC9A8DBA1124B8160046F5EC /* tnet_dns_opt.h in Headers */, + EC9A8DBC1124B8160046F5EC /* tnet_dns_ptr.h in Headers */, + EC9A8DBE1124B8160046F5EC /* tnet_dns_rr.h in Headers */, + EC9A8DC01124B8160046F5EC /* tnet_dns_soa.h in Headers */, + EC9A8DC21124B8160046F5EC /* tnet_dns_srv.h in Headers */, + EC9A8DC41124B8160046F5EC /* tnet_dns_txt.h in Headers */, + EC9A8DC61124B8160046F5EC /* tnet_ice.h in Headers */, + EC9A8DC91124B8160046F5EC /* tnet_stun.h in Headers */, + EC9A8DCB1124B8160046F5EC /* tnet_stun_attribute.h in Headers */, + EC9A8DCD1124B8160046F5EC /* tnet_stun_message.h in Headers */, + EC9A8DCE1124B8160046F5EC /* tinyNET_config.h in Headers */, + EC9A8DD01124B8160046F5EC /* tnet.h in Headers */, + EC9A8DD21124B8160046F5EC /* tnet_auth.h in Headers */, + EC9A8DD31124B8160046F5EC /* tnet_hardwares.h in Headers */, + EC9A8DD51124B8160046F5EC /* tnet_nat.h in Headers */, + EC9A8DD71124B8160046F5EC /* tnet_poll.h in Headers */, + EC9A8DD81124B8160046F5EC /* tnet_proto.h in Headers */, + EC9A8DDA1124B8160046F5EC /* tnet_socket.h in Headers */, + EC9A8DDC1124B8160046F5EC /* tnet_transport.h in Headers */, + EC9A8DDF1124B8160046F5EC /* tnet_types.h in Headers */, + EC9A8DE11124B8160046F5EC /* tnet_utils.h in Headers */, + EC9A8DE31124B8160046F5EC /* tnet_turn.h in Headers */, + EC9A8DE51124B8160046F5EC /* tnet_turn_attribute.h in Headers */, + EC9A8DE71124B8160046F5EC /* tnet_turn_message.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -395,6 +726,8 @@ ECE5BA7A10EF6D8500B7EDDD /* tsk_timer.h in Headers */, ECE5BA7C10EF6D8500B7EDDD /* tsk_url.h in Headers */, ECE5BA7E10EF6D8500B7EDDD /* tsk_xml.h in Headers */, + EC9A8D3A1124B7C90046F5EC /* tsk_ppfcs32.h in Headers */, + EC9A8D3C1124B7C90046F5EC /* tsk_uuid.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -478,14 +811,44 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ECE5B91710EF65EF00B7EDDD /* tnet.c in Sources */, - ECE5B91910EF65EF00B7EDDD /* tnet_auth.c in Sources */, - ECE5B91B10EF65EF00B7EDDD /* tnet_poll.c in Sources */, - ECE5B91D10EF65F000B7EDDD /* tnet_socket.c in Sources */, - ECE5B91F10EF65F000B7EDDD /* tnet_transport.c in Sources */, - ECE5B92110EF65F000B7EDDD /* tnet_transport_poll.c in Sources */, - ECE5B92210EF65F000B7EDDD /* tnet_transport_win32.c in Sources */, - ECE5B92410EF65F000B7EDDD /* tnet_utils.c in Sources */, + EC9A8D991124B8160046F5EC /* tnet_dhcp.c in Sources */, + EC9A8D9B1124B8160046F5EC /* tnet_dhcp_message.c in Sources */, + EC9A8D9D1124B8160046F5EC /* tnet_dhcp_option.c in Sources */, + EC9A8D9F1124B8160046F5EC /* tnet_dhcp_option_sip.c in Sources */, + EC9A8DA11124B8160046F5EC /* tnet_dhcp6.c in Sources */, + EC9A8DA31124B8160046F5EC /* tnet_dhcp6_duid.c in Sources */, + EC9A8DA51124B8160046F5EC /* tnet_dhcp6_message.c in Sources */, + EC9A8DA71124B8160046F5EC /* tnet_dhcp6_option.c in Sources */, + EC9A8DA91124B8160046F5EC /* tnet_dns.c in Sources */, + EC9A8DAB1124B8160046F5EC /* tnet_dns_a.c in Sources */, + EC9A8DAD1124B8160046F5EC /* tnet_dns_aaaa.c in Sources */, + EC9A8DAF1124B8160046F5EC /* tnet_dns_cname.c in Sources */, + EC9A8DB11124B8160046F5EC /* tnet_dns_message.c in Sources */, + EC9A8DB31124B8160046F5EC /* tnet_dns_mx.c in Sources */, + EC9A8DB51124B8160046F5EC /* tnet_dns_naptr.c in Sources */, + EC9A8DB71124B8160046F5EC /* tnet_dns_ns.c in Sources */, + EC9A8DB91124B8160046F5EC /* tnet_dns_opt.c in Sources */, + EC9A8DBB1124B8160046F5EC /* tnet_dns_ptr.c in Sources */, + EC9A8DBD1124B8160046F5EC /* tnet_dns_rr.c in Sources */, + EC9A8DBF1124B8160046F5EC /* tnet_dns_soa.c in Sources */, + EC9A8DC11124B8160046F5EC /* tnet_dns_srv.c in Sources */, + EC9A8DC31124B8160046F5EC /* tnet_dns_txt.c in Sources */, + EC9A8DC51124B8160046F5EC /* tnet_ice.c in Sources */, + EC9A8DC81124B8160046F5EC /* tnet_stun.c in Sources */, + EC9A8DCA1124B8160046F5EC /* tnet_stun_attribute.c in Sources */, + EC9A8DCC1124B8160046F5EC /* tnet_stun_message.c in Sources */, + EC9A8DCF1124B8160046F5EC /* tnet.c in Sources */, + EC9A8DD11124B8160046F5EC /* tnet_auth.c in Sources */, + EC9A8DD41124B8160046F5EC /* tnet_nat.c in Sources */, + EC9A8DD61124B8160046F5EC /* tnet_poll.c in Sources */, + EC9A8DD91124B8160046F5EC /* tnet_socket.c in Sources */, + EC9A8DDB1124B8160046F5EC /* tnet_transport.c in Sources */, + EC9A8DDD1124B8160046F5EC /* tnet_transport_poll.c in Sources */, + EC9A8DDE1124B8160046F5EC /* tnet_transport_win32.c in Sources */, + EC9A8DE01124B8160046F5EC /* tnet_utils.c in Sources */, + EC9A8DE21124B8160046F5EC /* tnet_turn.c in Sources */, + EC9A8DE41124B8160046F5EC /* tnet_turn_attribute.c in Sources */, + EC9A8DE61124B8160046F5EC /* tnet_turn_message.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -518,6 +881,8 @@ ECE5BA7910EF6D8500B7EDDD /* tsk_timer.c in Sources */, ECE5BA7B10EF6D8500B7EDDD /* tsk_url.c in Sources */, ECE5BA7D10EF6D8500B7EDDD /* tsk_xml.c in Sources */, + EC9A8D391124B7C90046F5EC /* tsk_ppfcs32.c in Sources */, + EC9A8D3B1124B7C90046F5EC /* tsk_uuid.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -561,6 +926,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ../../tinyNET/src; INSTALL_PATH = /usr/local/lib; PRODUCT_NAME = tinyNET; }; @@ -649,6 +1015,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ../../tinyNET/src; INSTALL_PATH = /usr/local/bin; PREBINDING = NO; PRODUCT_NAME = test;