Begin adding MSRP public API functions.

Change sipevent to return the op handle instead of the op id.
This commit is contained in:
bossiel 2010-03-16 18:38:14 +00:00
parent 908f9865bc
commit 299e397a9f
42 changed files with 1465 additions and 112 deletions

View File

@ -65,6 +65,7 @@ tmsrp_header_From_Path_t;
typedef tsk_list_t tmsrp_headers_From_Path_L_t;
tmsrp_header_From_Path_t *tmsrp_header_From_Path_parse(const char *data, size_t size);
tmsrp_header_From_Path_t *tmsrp_header_From_Path_clone(const tmsrp_header_From_Path_t* From_Path);
TINYMSRP_GEXTERN const void *tmsrp_header_From_Path_def_t;

View File

@ -65,6 +65,7 @@ tmsrp_header_To_Path_t;
typedef tsk_list_t tmsrp_headers_To_Path_L_t;
tmsrp_header_To_Path_t *tmsrp_header_To_Path_parse(const char *data, size_t size);
tmsrp_header_To_Path_t *tmsrp_header_To_Path_clone(const tmsrp_header_To_Path_t* );
TINYMSRP_GEXTERN const void *tmsrp_header_To_Path_def_t;

View File

@ -76,7 +76,6 @@ TMSRP_BEGIN_DECLS
#define TMSRP_MESSAGE_HAS_CONTENT(message) ((message) && (message)->Content && (message)->Content->data)
#define TMSRP_MESSAGE_CONTENT(message) (TMSRP_MESSAGE_HAS_CONTENT(message) ? (message)->Content->data : 0)
#define TMSRP_RESPONSE_IS(self, code) (TMSRP_RESPONSE_CODE((self)) == code)
#define TMSRP_RESPONSE_IS_NXX(self, N) (TMSRP_MESSAGE_IS_RESPONSE((self)) && N##00<= TMSRP_RESPONSE_CODE((self)) && TMSRP_RESPONSE_CODE((self)) <= N##99)
#define TMSRP_RESPONSE_IS_1XX(self) TMSRP_RESPONSE_IS_NXX(self, 1)
@ -103,7 +102,7 @@ typedef struct tmsrp_message_s
tmsrp_message_type_t type;
char* tid;
union{
/*union*/struct{
struct{
char* method;
} request;

View File

@ -0,0 +1,46 @@
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tmsrp.h
* @brief MSRP API.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TINYMSRP_TMSRP_H
#define TINYMSRP_TMSRP_H
#include "tinyMSRP_config.h"
#include "tinyMSRP/tmsrp_message.h"
TMSRP_BEGIN_DECLS
TINYMSRP_API tmsrp_request_t* tmsrp_create_bodiless();
TINYMSRP_API tmsrp_response_t* tmsrp_create_response(const tmsrp_request_t* request, short status, const char* comment);
TINYMSRP_API tmsrp_request_t* tmsrp_create_report(const tmsrp_request_t* request, short status, const char* reason);
TINYMSRP_API int tmsrp_isReportRequired(const tmsrp_request_t* request);
TMSRP_END_DECLS
#endif /* TINYMSRP_TMSRP_H */

View File

@ -116,7 +116,29 @@ tmsrp_header_From_Path_t *tmsrp_header_From_Path_parse(const char *data, size_t
}
tmsrp_header_From_Path_t *tmsrp_header_From_Path_clone(const tmsrp_header_From_Path_t* From_Path)
{
tmsrp_header_From_Path_t* clone = TMSRP_NULL;
if(!From_Path){
goto bail;
}
clone = TMSRP_HEADER_FROM_PATH_CREATE_NULL();
clone->uri = tmsrp_uri_clone(From_Path->uri);
if(From_Path->otherURIs){
tsk_list_item_t *item;
clone->otherURIs = TSK_LIST_CREATE();
tsk_list_foreach(item, From_Path->otherURIs){
tmsrp_uri_t *uri = tmsrp_uri_clone(TMSRP_URI(item->data));
tsk_list_push_back_data(clone->otherURIs, (void**)&uri);
}
}
bail:
return clone;
}

View File

@ -115,7 +115,29 @@ tmsrp_header_To_Path_t *tmsrp_header_To_Path_parse(const char *data, size_t size
return header;
}
tmsrp_header_To_Path_t *tmsrp_header_To_Path_clone(const tmsrp_header_To_Path_t* To_Path)
{
tmsrp_header_To_Path_t* clone = TMSRP_NULL;
if(!To_Path){
goto bail;
}
clone = TMSRP_HEADER_TO_PATH_CREATE_NULL();
clone->uri = tmsrp_uri_clone(To_Path->uri);
if(To_Path->otherURIs){
tsk_list_item_t *item;
clone->otherURIs = TSK_LIST_CREATE();
tsk_list_foreach(item, To_Path->otherURIs){
tmsrp_uri_t *uri = tmsrp_uri_clone(TMSRP_URI(item->data));
tsk_list_push_back_data(clone->otherURIs, (void**)&uri);
}
}
bail:
return clone;
}

View File

@ -309,7 +309,29 @@ _again:
}
tmsrp_header_From_Path_t *tmsrp_header_From_Path_clone(const tmsrp_header_From_Path_t* From_Path)
{
tmsrp_header_From_Path_t* clone = TMSRP_NULL;
if(!From_Path){
goto bail;
}
clone = TMSRP_HEADER_FROM_PATH_CREATE_NULL();
clone->uri = tmsrp_uri_clone(From_Path->uri);
if(From_Path->otherURIs){
tsk_list_item_t *item;
clone->otherURIs = TSK_LIST_CREATE();
tsk_list_foreach(item, From_Path->otherURIs){
tmsrp_uri_t *uri = tmsrp_uri_clone(TMSRP_URI(item->data));
tsk_list_push_back_data(clone->otherURIs, (void**)&uri);
}
}
bail:
return clone;
}

View File

@ -302,7 +302,29 @@ _again:
return header;
}
tmsrp_header_To_Path_t *tmsrp_header_To_Path_clone(const tmsrp_header_To_Path_t* To_Path)
{
tmsrp_header_To_Path_t* clone = TMSRP_NULL;
if(!To_Path){
goto bail;
}
clone = TMSRP_HEADER_TO_PATH_CREATE_NULL();
clone->uri = tmsrp_uri_clone(To_Path->uri);
if(To_Path->otherURIs){
tsk_list_item_t *item;
clone->otherURIs = TSK_LIST_CREATE();
tsk_list_foreach(item, To_Path->otherURIs){
tmsrp_uri_t *uri = tmsrp_uri_clone(TMSRP_URI(item->data));
tsk_list_push_back_data(clone->otherURIs, (void**)&uri);
}
}
bail:
return clone;
}

View File

@ -0,0 +1,159 @@
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tmsrp.c
* @brief MSRP API.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#include "tmsrp.h"
#include "tsk_time.h"
#include "tsk_string.h"
#include <stdlib.h> /* rand() */
#define TMSR_DEFAULT_NAMESPACE 0 // "000"
tmsrp_request_t* tmsrp_create_bodiless()
{
/* RFC 4975 - 7.1. Constructing Requests
Requests with no bodies are useful when a client wishes to send
"traffic", but does not wish to send content to be rendered to the
peer user. For example, the active endpoint sends a SEND request
immediately upon establishing a connection. If it has nothing to
say at the moment, it can send a request with no body. Bodiless
requests may also be used in certain applications to keep Network
Address Translation (NAT) bindings alive, etc.
Bodiless requests are distinct from requests with empty bodies. A
request with an empty body will have a Content-Type header field
value and will generally be rendered to the recipient according to
the rules for that type.
*/
tmsrp_request_t* bodiless = TMSRP_NULL;
tsk_istr_t tid;
tsk_istr_t mid;
tsk_strrandom(&tid);
tsk_strrandom(&mid);
if(!(bodiless = TMSRP_REQUEST_CREATE(tid, "SEND"))){
goto bail;
}
//FIXME: To-Path
//FIXME: From-Path
/* Message-ID */
TMSRP_MESSAGE_ADD_HEADER(bodiless, TMSRP_HEADER_MESSAGE_ID_VA_ARGS(mid));
bail:
return bodiless;
}
tmsrp_response_t* tmsrp_create_response(const tmsrp_request_t* request, short status, const char* comment)
{
tmsrp_response_t* response = TMSRP_NULL;
if(!request){
goto bail;
}
/* MSRP response will have the same tid ==> nothing to do */
if(!(response = TMSRP_RESPONSE_CREATE(request->tid, status, comment))){
goto bail;
}
/* reverse To-Path and From-Path */
response->To = (tmsrp_header_To_Path_t*)tmsrp_header_From_Path_clone(request->From);
TMSRP_HEADER(response->To)->type = tmsrp_htype_To_Path; /* as it's a clone we shall change type */
response->From = (tmsrp_header_From_Path_t*)tmsrp_header_To_Path_clone(request->To);
TMSRP_HEADER(response->From)->type = tmsrp_htype_From_Path; /* as it's a clone we shall change type */
/* Byte-Range */
response->ByteRange = tsk_object_ref((void*)request->ByteRange);
bail:
return response;
}
tmsrp_request_t* tmsrp_create_report(const tmsrp_request_t* request, short status, const char* reason)
{
/* RFC 4975 - 7.1.2. Sending REPORT Requests
* REPORT requests are similar to SEND requests, except that report
* requests MUST NOT include Success-Report or Failure-Report header
* fields, and MUST contain a Status header field. REPORT requests MUST
* contain the Message-ID header field from the original SEND request.
*/
tmsrp_request_t* report = TMSRP_NULL;
tsk_istr_t tid;
if(!request || !request->MessageID){
goto bail;
}
/* Generate new tid (Report has it's own tid) */
tsk_strrandom(&tid);
/* MSRP response will have the same tid ==> nothing to do */
if(!(report = TMSRP_REQUEST_CREATE(tid, "REPORT"))){
goto bail;
}
/* reverse To-Path and From-Path */
report->To = (tmsrp_header_To_Path_t*)tmsrp_header_From_Path_clone(request->From);
TMSRP_HEADER(report->To)->type = tmsrp_htype_To_Path; /* as it's a clone we shall change type */
report->From = (tmsrp_header_From_Path_t*)tmsrp_header_To_Path_clone(request->To);
TMSRP_HEADER(report->From)->type = tmsrp_htype_From_Path; /* as it's a clone we shall change type */
/* Message ID */
TMSRP_MESSAGE_ADD_HEADER(report, TMSRP_HEADER_MESSAGE_ID_VA_ARGS(request->MessageID->value));
/* Byte-Range */
report->ByteRange = tsk_object_ref((void*)request->ByteRange);
/* Status */
TMSRP_MESSAGE_ADD_HEADER(report, TMSRP_HEADER_STATUS_VA_ARGS(TMSR_DEFAULT_NAMESPACE, status, reason));
bail:
return report;
}
int tmsrp_isReportRequired(const tmsrp_request_t* request)
{
if(!request){
return 0;
}
/* Success Report. */
if(request->SuccessReport && request->SuccessReport->yes){
if(request->Status && (request->Status->code>199 && request->Status->code<300)){
return 1;
}
}
/* Failure Report */
if(!request->FailureReport || (request->FailureReport && request->FailureReport->type != freport_no)){
if(request->Status && (request->Status->code<=199 && request->Status->code>=300)){
return 1;
}
}
return 0;
}

View File

@ -261,7 +261,9 @@ int tmsrp_message_tostring(const tmsrp_message_t *self, tsk_buffer_t *output)
tmsrp_header_tostring(TMSRP_HEADER(self->Status), output);
}
/* All other headers (Other-Mime-headers)*/
/* All other headers (Other-Mime-headers)
- Should be empty if no content is added (see below) but ...
*/
{
tsk_list_item_t *item;
tsk_list_foreach(item, self->headers){
@ -269,13 +271,19 @@ int tmsrp_message_tostring(const tmsrp_message_t *self, tsk_buffer_t *output)
tmsrp_header_tostring(hdr, output);
}
}
/* Content-Type */
if(self->ContentType){
tmsrp_header_tostring(TMSRP_HEADER(self->ContentType), output);
}
/* RFC 4975 - 7.1. Constructing Requests
A request with no body MUST NOT include a Content-Type or any other
MIME-specific header fields. A request without a body MUST contain
an end-line after the final header field. No extra CRLF will be
present between the header section and the end-line.
*/
/* CONTENT */
if(TMSRP_MESSAGE_HAS_CONTENT(self)){
/* Content-Type */
if(self->ContentType){
tmsrp_header_tostring(TMSRP_HEADER(self->ContentType), output);
}
tsk_buffer_append(output, "\r\n", 2);
tsk_buffer_append(output, TSK_BUFFER_TO_STRING(self->Content), TSK_BUFFER_SIZE(self->Content));
tsk_buffer_append(output, "\r\n", 2);
@ -349,13 +357,13 @@ static void* tmsrp_message_destroy(void * self)
TSK_FREE(message->tid);
// request
if(TMSRP_MESSAGE_IS_REQUEST(message)){
//if(TMSRP_MESSAGE_IS_REQUEST(message)){
TSK_FREE(message->line.request.method);
}
//}
// response
if(TMSRP_MESSAGE_IS_RESPONSE(message)){
//if(TMSRP_MESSAGE_IS_RESPONSE(message)){
TSK_FREE(message->line.response.comment);
}
//}
// Very common headers
TSK_OBJECT_SAFE_FREE(message->To);

View File

@ -24,6 +24,7 @@
#include "tsk.h"
#include "tmsrp.h"
#include "tinyMSRP/parsers/tmsrp_parser_message.h"
#include "test_parser.h"

View File

@ -61,21 +61,73 @@ void test_parser()
{
tmsrp_message_t *message = 0;
//
// Serialization / Deserialization
//
/* deserialize the message */
if((message = tmsrp_message_parse(MSRP_MSG_TO_TEST, strlen(MSRP_MSG_TO_TEST)))){
tsk_buffer_t *buffer = TSK_BUFFER_CREATE_NULL();
/* serialize the message */
tmsrp_message_tostring(message, buffer);
TSK_DEBUG_INFO("\nMSRP Message=\n%s", TSK_BUFFER_TO_STRING(buffer));
TSK_DEBUG_INFO("\nMSRP Message=\n%s\n\n", TSK_BUFFER_TO_STRING(buffer));
TSK_OBJECT_SAFE_FREE(buffer);
}
else{
TSK_DEBUG_ERROR("Failed to parse MSRP message.");
TSK_DEBUG_ERROR("Failed to parse MSRP message(1).");
}
TSK_OBJECT_SAFE_FREE(message);
//
// Create Response from Request
//
if((message = tmsrp_message_parse(MSRP_MSG_REQUEST, strlen(MSRP_MSG_REQUEST)))){
tsk_buffer_t *buffer = TSK_BUFFER_CREATE_NULL();
tmsrp_response_t* response = tmsrp_create_response(message, 202, "Accepted");
tmsrp_message_tostring(response, buffer);
TSK_DEBUG_INFO("\nMSRP Response=\n%s\n\n", TSK_BUFFER_TO_STRING(buffer));
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(response);
}
else{
TSK_DEBUG_ERROR("Failed to parse MSRP message(2).");
}
TSK_OBJECT_SAFE_FREE(message);
//
// Create Report from Request
//
if((message = tmsrp_message_parse(MSRP_MSG_REQUEST, strlen(MSRP_MSG_REQUEST)))){
tsk_buffer_t *buffer = TSK_BUFFER_CREATE_NULL();
tmsrp_request_t* report = tmsrp_create_report(message, 403, "Stop-sending-message");
tmsrp_message_tostring(report, buffer);
TSK_DEBUG_INFO("\nMSRP Response=\n%s\n\n", TSK_BUFFER_TO_STRING(buffer));
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(report);
}
else{
TSK_DEBUG_ERROR("Failed to parse MSRP message(2).");
}
TSK_OBJECT_SAFE_FREE(message);
//
// Create bodiless Request
//
{
tsk_buffer_t *buffer = TSK_BUFFER_CREATE_NULL();
tmsrp_request_t* bodiless = tmsrp_create_bodiless();
tmsrp_message_tostring(bodiless, buffer);
TSK_DEBUG_INFO("\nMSRP Bodiless=\n%s\n\n", TSK_BUFFER_TO_STRING(buffer));
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(bodiless);
}
}
#endif /* _TEST_MSRPPARSER_H */

View File

@ -165,7 +165,7 @@ tsk_object_t* tsk_object_ref(tsk_object_t *self)
TSK_OBJECT_HEADER_GET(self)->refCount++;
return self;
}
return 0;
return TSK_NULL;
}
/**@ingroup tsk_object_group

View File

@ -375,8 +375,8 @@ void tsk_itoa(int64_t i, tsk_istr_t *result)
**/
void tsk_strrandom(tsk_istr_t *result)
{
uint64_t epoch = tsk_time_epoch();
tsk_itoa(epoch, result);
static uint64_t __counter = 1;
tsk_itoa((tsk_time_epoch() ^ rand()) ^ ++__counter, result);
}
/**@ingroup tsk_string_group

View File

@ -55,7 +55,7 @@ typedef struct tsip_message_event_e
}
tsip_message_event_t;
int tsip_message_event_signal(tsip_message_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
int tsip_message_event_signal(tsip_message_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
TINYSIP_GEXTERN const void *tsip_message_event_def_t;

View File

@ -60,7 +60,7 @@ typedef struct tsip_publish_event_e
}
tsip_publish_event_t;
int tsip_publish_event_signal(tsip_publish_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
int tsip_publish_event_signal(tsip_publish_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
TINYSIP_GEXTERN const void *tsip_publish_event_def_t;

View File

@ -60,7 +60,7 @@ typedef struct tsip_register_event_e
}
tsip_register_event_t;
int tsip_register_event_signal(tsip_register_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
int tsip_register_event_signal(tsip_register_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
TINYSIP_GEXTERN const void *tsip_register_event_def_t;

View File

@ -65,7 +65,7 @@ typedef struct tsip_subscribe_event_e
}
tsip_subscribe_event_t;
int tsip_subscribe_event_signal(tsip_subscribe_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
int tsip_subscribe_event_signal(tsip_subscribe_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
TINYSIP_GEXTERN const void *tsip_subscribe_event_def_t;

View File

@ -36,7 +36,7 @@
TSIP_BEGIN_DECLS
#define TSIP_EVENT_CREATE(stack, opid, code, phrase, sipmessage, type) tsk_object_new(tsip_event_def_t, stack, opid, code, phrase, (const tsip_message_t*)sipmessage, type)
#define TSIP_EVENT_CREATE(stack, operation, code, phrase, sipmessage, type) tsk_object_new(tsip_event_def_t, stack, operation, code, phrase, (const tsip_message_t*)sipmessage, type)
#define TSIP_EVENT(self) ((tsip_event_t*)(self))
@ -58,7 +58,7 @@ typedef struct tsip_event_s
TSK_DECLARE_OBJECT;
struct tsip_stack_s * stack;
tsip_operation_id_t opid;
tsip_operation_handle_t* operation;
short code;
char *phrase;
@ -71,7 +71,7 @@ tsip_event_t;
TINYSIP_GEXTERN const void *tsip_event_def_t;
int tsip_event_init(tsip_event_t* self, struct tsip_stack_s *stack, tsip_operation_id_t opid, short code, const char *phrase, const struct tsip_message_s* sipmessage, tsip_event_type_t type);
int tsip_event_init(tsip_event_t* self, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short code, const char *phrase, const struct tsip_message_s* sipmessage, tsip_event_type_t type);
int tsip_event_deinit(tsip_event_t* self);
typedef int (*tsip_stack_callback)(const tsip_event_t *sipevent);

View File

@ -39,10 +39,10 @@
#define TSIP_MESSAGE_EVENT_CREATE( type) tsk_object_new(tsip_message_event_def_t, type)
int tsip_message_event_signal(tsip_message_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const tsip_message_t* sipmessage)
int tsip_message_event_signal(tsip_message_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const tsip_message_t* sipmessage)
{
tsip_message_event_t* sipevent = TSIP_MESSAGE_EVENT_CREATE(type);
tsip_event_init(TSIP_EVENT(sipevent), stack, opid, status_code, phrase, sipmessage, tsip_event_message);
tsip_event_init(TSIP_EVENT(sipevent), stack, operation, status_code, phrase, sipmessage, tsip_event_message);
TSK_RUNNABLE_ENQUEUE_OBJECT(TSK_RUNNABLE(stack), sipevent);

View File

@ -39,10 +39,10 @@
#define TSIP_PUBLISH_EVENT_CREATE( type) tsk_object_new(tsip_publish_event_def_t, type)
int tsip_publish_event_signal(tsip_publish_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const tsip_message_t* sipmessage)
int tsip_publish_event_signal(tsip_publish_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const tsip_message_t* sipmessage)
{
tsip_publish_event_t* sipevent = TSIP_PUBLISH_EVENT_CREATE(type);
tsip_event_init(TSIP_EVENT(sipevent), stack, opid, status_code, phrase, sipmessage, tsip_event_publish);
tsip_event_init(TSIP_EVENT(sipevent), stack, operation, status_code, phrase, sipmessage, tsip_event_publish);
TSK_RUNNABLE_ENQUEUE_OBJECT(TSK_RUNNABLE(stack), sipevent);

View File

@ -39,10 +39,10 @@
#define TSIP_REGISTER_EVENT_CREATE( type) tsk_object_new(tsip_register_event_def_t, type)
int tsip_register_event_signal(tsip_register_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const tsip_message_t* sipmessage)
int tsip_register_event_signal(tsip_register_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const tsip_message_t* sipmessage)
{
tsip_register_event_t* sipevent = TSIP_REGISTER_EVENT_CREATE(type);
tsip_event_init(TSIP_EVENT(sipevent), stack, opid, status_code, phrase, sipmessage, tsip_event_register);
tsip_event_init(TSIP_EVENT(sipevent), stack, operation, status_code, phrase, sipmessage, tsip_event_register);
TSK_RUNNABLE_ENQUEUE_OBJECT(TSK_RUNNABLE(stack), sipevent);

View File

@ -39,10 +39,10 @@
#define TSIP_SUBSCRIBE_EVENT_CREATE( type) tsk_object_new(tsip_subscribe_event_def_t, type)
int tsip_subscribe_event_signal(tsip_subscribe_event_type_t type, struct tsip_stack_s *stack, tsip_operation_id_t opid, short status_code, const char *phrase, const tsip_message_t* sipmessage)
int tsip_subscribe_event_signal(tsip_subscribe_event_type_t type, struct tsip_stack_s *stack, tsip_operation_handle_t* operation, short status_code, const char *phrase, const tsip_message_t* sipmessage)
{
tsip_subscribe_event_t* sipevent = TSIP_SUBSCRIBE_EVENT_CREATE(type);
tsip_event_init(TSIP_EVENT(sipevent), stack, opid, status_code, phrase, sipmessage, tsip_event_subscribe);
tsip_event_init(TSIP_EVENT(sipevent), stack, operation, status_code, phrase, sipmessage, tsip_event_subscribe);
TSK_RUNNABLE_ENQUEUE_OBJECT(TSK_RUNNABLE(stack), sipevent);

View File

@ -412,8 +412,7 @@ int tsip_dialog_response_send(const tsip_dialog_t *self, tsip_response_t* respon
/* As this is a response ...then there should be a matching server transaction.
*/
const tsip_transac_t *transac = tsip_transac_layer_find_server(layer, response);
if(transac)
{
if(transac){
ret = transac->callback(transac, tsip_transac_outgoing_msg, response);
}
}

View File

@ -40,7 +40,7 @@
#define DEBUG_STATE_MACHINE 1
#define TSIP_DIALOG_MESSAGE_SIGNAL(self, type, code, phrase, message) \
tsip_message_event_signal(type, TSIP_DIALOG_GET_STACK(self), tsip_operation_get_id(TSIP_DIALOG(self)->operation), code, phrase, message)
tsip_message_event_signal(type, TSIP_DIALOG_GET_STACK(self), TSIP_DIALOG(self)->operation, code, phrase, message)
/* ======================== internal functions ======================== */
int send_MESSAGE(tsip_dialog_message_t *self, tsip_request_t *request);
@ -462,7 +462,7 @@ static void* tsip_dialog_message_create(void * self, va_list * app)
tsk_fsm_set_callback_terminated(dialog->fsm, TSK_FSM_ONTERMINATED(tsip_dialog_message_OnTerminated), (const void*)dialog);
/* Initialize base class */
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_MESSAGE, stack, 0, operation);
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_MESSAGE, stack, TSIP_NULL, operation);
/* Initialize the class itself */
tsip_dialog_message_init(self);

View File

@ -46,7 +46,7 @@
#define DEBUG_STATE_MACHINE 1
#define TSIP_DIALOG_PUBLISH_TIMER_SCHEDULE(TX) TSIP_DIALOG_TIMER_SCHEDULE(publish, TX)
#define TSIP_DIALOG_PUBLISH_SIGNAL(self, type, code, phrase, message) \
tsip_publish_event_signal(type, TSIP_DIALOG_GET_STACK(self), tsip_operation_get_id(TSIP_DIALOG(self)->operation), code, phrase, message)
tsip_publish_event_signal(type, TSIP_DIALOG_GET_STACK(self), TSIP_DIALOG(self)->operation, code, phrase, message)
/* ======================== internal functions ======================== */
int send_publish(tsip_dialog_publish_t *self, refresh_type_t rtype);
@ -631,7 +631,7 @@ static void* tsip_dialog_publish_create(void * self, va_list * app)
tsk_fsm_set_callback_terminated(dialog->fsm, TSK_FSM_ONTERMINATED(tsip_dialog_publish_OnTerminated), (const void*)dialog);
/* init base class */
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_PUBLISH, stack, 0, operation);
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_PUBLISH, stack, TSIP_NULL, operation);
/* init the class itself */
tsip_dialog_publish_init(self);

View File

@ -47,7 +47,7 @@
#define DEBUG_STATE_MACHINE 1
#define TSIP_DIALOG_REGISTER_TIMER_SCHEDULE(TX) TSIP_DIALOG_TIMER_SCHEDULE(register, TX)
#define TSIP_DIALOG_REGISTER_SIGNAL(self, type, code, phrase, message) \
tsip_register_event_signal(type, TSIP_DIALOG_GET_STACK(self),tsip_operation_get_id(TSIP_DIALOG(self)->operation), code, phrase, message)
tsip_register_event_signal(type, TSIP_DIALOG_GET_STACK(self), TSIP_DIALOG(self)->operation, code, phrase, message)
/* ======================== internal functions ======================== */
@ -778,7 +778,7 @@ static void* tsip_dialog_register_create(void * self, va_list * app)
tsk_fsm_set_callback_terminated(dialog->fsm, TSK_FSM_ONTERMINATED(tsip_dialog_register_OnTerminated), (const void*)dialog);
/* Initialize base class */
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_REGISTER, stack, 0, operation);
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_REGISTER, stack, TSIP_NULL, operation);
/* Initialize the class itself */
tsip_dialog_register_init(self);

View File

@ -44,7 +44,7 @@
#define DEBUG_STATE_MACHINE 1
#define TSIP_DIALOG_SUBSCRIBE_TIMER_SCHEDULE(TX) TSIP_DIALOG_TIMER_SCHEDULE(subscribe, TX)
#define TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, type, code, phrase, message) \
tsip_subscribe_event_signal(type, TSIP_DIALOG_GET_STACK(self), tsip_operation_get_id(TSIP_DIALOG(self)->operation), code, phrase, message)
tsip_subscribe_event_signal(type, TSIP_DIALOG_GET_STACK(self), TSIP_DIALOG(self)->operation, code, phrase, message)
/* ======================== internal functions ======================== */
int send_subscribe(tsip_dialog_subscribe_t *self);
@ -643,7 +643,7 @@ static void* tsip_dialog_subscribe_create(void * self, va_list * app)
tsk_fsm_set_callback_terminated(dialog->fsm, TSK_FSM_ONTERMINATED(tsip_dialog_subscribe_OnTerminated), (const void*)dialog);
/* Initialize base class */
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_SUBSCRIBE, stack, 0, operation);
tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_SUBSCRIBE, stack, TSIP_NULL, operation);
/* Initialize the class itself */
tsip_dialog_subscribe_init(self);

View File

@ -97,8 +97,7 @@ int tsip_transac_send(tsip_transac_t *self, const char *branch, const tsip_messa
if(self && self->stack)
{
const tsip_transport_layer_t *layer = tsip_stack_get_transport_layer(self->stack);
if(layer)
{
if(layer){
return tsip_transport_layer_send(layer, branch, msg);
}
}

View File

@ -383,8 +383,7 @@ int tsip_transac_nist_Proceeding_2_Proceeding_X_request(va_list *app)
recently sent provisional response MUST be passed to the transport
layer for retransmission.
*/
if(self->lastResponse)
{
if(self->lastResponse){
tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, self->lastResponse);
}
@ -431,8 +430,7 @@ int tsip_transac_nist_Completed_2_Completed_X_request(va_list *app)
While in the "Completed" state, the server transaction MUST pass the final response to the transport
layer for retransmission whenever a retransmission of the request is received.
*/
if(self->lastResponse)
{
if(self->lastResponse){
tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, self->lastResponse);
}

View File

@ -134,10 +134,10 @@ static int tsip_transport_layer_stream_cb(const tnet_transport_event_t* e)
}
if(message){
/* Handle the incoming message. */
ret = tsip_transport_layer_handle_incoming_msg(transport, message);
/* Set fd */
message->sockfd = e->fd;
/* Alert transaction/dialog layer */
ret = tsip_transport_layer_handle_incoming_msg(transport, message);
}
else ret = -15;
@ -171,9 +171,10 @@ static int tsip_transport_layer_dgram_cb(const tnet_transport_event_t* e)
if(tsip_message_parse(&state, &message, TSIP_TRUE) == TSIP_TRUE
&& message->firstVia && message->Call_ID && message->CSeq && message->From && message->To)
{
ret = tsip_transport_layer_handle_incoming_msg(transport, message);
/* Set fd */
message->sockfd = e->fd;
/* Alert transaction/dialog layer */
ret = tsip_transport_layer_handle_incoming_msg(transport, message);
}
TSK_OBJECT_SAFE_FREE(message);
@ -187,8 +188,7 @@ tsip_transport_t* tsip_transport_layer_find(const tsip_transport_layer_t* self,
destIP = TSIP_STACK(self->stack)->proxy_cscf;
*destPort = TSIP_STACK(self->stack)->proxy_cscf_port;
if(!self)
{
if(!self){
return 0;
}
@ -354,8 +354,7 @@ int tsip_transport_layer_send(const tsip_transport_layer_t* self, const char *br
tsip_transport_t *transport = tsip_transport_layer_find(self, msg, destIP, &destPort);
if(transport)
{
if(tsip_transport_send(transport, branch, TSIP_MESSAGE(msg), destIP, destPort))
{
if(tsip_transport_send(transport, branch, TSIP_MESSAGE(msg), destIP, destPort)){
return 0;
}
else return -3;

View File

@ -477,22 +477,6 @@ int tsip_stack_set(tsip_stack_handle_t *self, ...)
return -1;
}
//int tsip_stack_alert(const tsip_stack_handle_t *self, tsip_operation_id_t opid, short status_code, char *reason_phrase, int incoming, tsip_event_type_t type)
//{
// if(self)
// {
// const tsip_stack_t *stack = self;
//
// TSK_RUNNABLE_ENQUEUE(TSK_RUNNABLE(stack), stack, opid, status_code, reason_phrase, incoming, type);
// //tsip_event_t *event = TSIP_EVENT_CREATE(stack, opid, status_code, reason_phrase, incoming, type);
// //TSK_RUNNABLE_ENQUEUE_OBJECT(TSK_RUNNABLE(stack), event);
//
// return 0;
// }
// return -1;
//}
//#include "tsk_thread.h"
int tsip_stack_stop(tsip_stack_handle_t *self)
{
if(self)

View File

@ -39,12 +39,12 @@
int tsip_event_init(tsip_event_t* self, struct tsip_stack_s *stack, tsip_operation_id_t opid, short code, const char *phrase, const tsip_message_t* sipmessage, tsip_event_type_t type)
int tsip_event_init(tsip_event_t* self, struct tsip_stack_s *stack, tsip_operation_handle_t *operation, short code, const char *phrase, const tsip_message_t* sipmessage, tsip_event_type_t type)
{
if(self && stack)
{
self->stack = tsk_object_ref(stack);
self->opid = opid;
self->operation = tsk_object_ref(operation);
self->code = code;
tsk_strupdate(&(self->phrase), phrase);
self->type = type;
@ -61,9 +61,11 @@ int tsip_event_deinit(tsip_event_t* self)
if(self)
{
TSK_OBJECT_SAFE_FREE(self->stack);
TSK_OBJECT_SAFE_FREE(self->operation);
TSK_FREE(self->phrase);
TSK_OBJECT_SAFE_FREE(self->sipmessage);
return 0;
}
return -1;
@ -92,13 +94,13 @@ static void* tsip_event_create(void * self, va_list * app)
{
const tsip_message_t* sipmessage;
tsip_stack_t *stack;
tsip_operation_id_t opid;
tsip_operation_handle_t *operation;
short code;
const char *phrase;
tsip_event_type_t type;
stack = va_arg(*app, tsip_stack_handle_t *);
opid = va_arg(*app, tsip_operation_id_t);
operation = va_arg(*app, tsip_operation_handle_t*);
#if defined(__GNUC__)
code = (short)va_arg(*app, int);
@ -110,7 +112,7 @@ static void* tsip_event_create(void * self, va_list * app)
sipmessage = va_arg(*app, const tsip_message_t*);
type = va_arg(*app, tsip_event_type_t);
tsip_event_init(self, stack, opid, code, phrase, sipmessage, type);
tsip_event_init(self, stack, operation, code, phrase, sipmessage, type);
}
return self;
}
@ -118,8 +120,7 @@ static void* tsip_event_create(void * self, va_list * app)
static void* tsip_event_destroy(void * self)
{
tsip_event_t *sipevent = self;
if(sipevent)
{
if(sipevent){
tsip_event_deinit(sipevent);
}
return self;

View File

@ -70,8 +70,11 @@
int test_stack_callback(const tsip_event_t *sipevent)
{
TSK_DEBUG_INFO("\n====\nSTACK event: %d [%s] with opid=%lld\n=====",
sipevent->code, sipevent->phrase, sipevent->opid);
sipevent->code, sipevent->phrase, tsip_operation_get_id(sipevent->operation));
// For operations created by the stack ==> call tsk_object_ref(sipevent->operation);
// to take ownership.
switch(sipevent->type)
{
//
@ -223,8 +226,8 @@ int test_stack_callback(const tsip_event_t *sipevent)
void test_stack()
{
#define DOMAIN "ericsson.com"
//#define DOMAIN "ericsson.com"
#define DOMAIN "micromethod.com"
//#define DOMAIN "ims.inexbee.com"
//#define DOMAIN "sip2sip.info"
@ -245,7 +248,7 @@ void test_stack()
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_PRIVACY("header;id"),
*/
/*
tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback,
TSIP_STACK_SET_DISPLAY_NAME("Mamadou"),
TSIP_STACK_SET_PUBLIC_IDENTITY("sip:mamadou@"DOMAIN),
@ -262,7 +265,7 @@ void test_stack()
TSIP_STACK_SET_DEVICE_ID("dd1289fa-c3d7-47bd-a40d-f1f1b2cc5ffc"),
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_PRIVACY("header;id"),
*/
/*
tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback,
TSIP_STACK_SET_DISPLAY_NAME("Mamadou"),
@ -272,17 +275,17 @@ void test_stack()
TSIP_STACK_SET_REALM("sip:"DOMAIN), // FIXME: without sip:
TSIP_STACK_SET_LOCAL_IP(LOCAL_IP),
//TSIP_STACK_SET_DISCOVERY_NAPTR(1),
TSIP_STACK_SET_PROXY_CSCF("pcscf.ims.inexbee.com", "tls", 0),
TSIP_STACK_SET_PROXY_CSCF("pcscf.ims.inexbee.com", "tcp", 0),
TSIP_STACK_SET_TLS_CERTS("C:\\tls\\ca.pki-crt.pem", "C:\\tls\\mamadou-crt.pem", "C:\\tls\\mamadou-key.pem"),
//TSIP_STACK_SET_PROXY_CSCF("192.168.0.15", "udp", 0),
TSIP_STACK_SET_PROXY_CSCF_PORT(4061),
TSIP_STACK_SET_PROXY_CSCF_PORT(4060),
//TSIP_STACK_SET_SECAGREE_IPSEC("hmac-md5-96", "null", "trans", "esp"),
TSIP_STACK_SET_MOBILITY("fixed"),
TSIP_STACK_SET_DEVICE_ID("dd1289fa-c3d7-47bd-a40d-f1f1b2cc5ffc"),
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_PRIVACY("header;id"),
*/
/*
tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback,
TSIP_STACK_SET_DISPLAY_NAME("Mamadou"),
TSIP_STACK_SET_PUBLIC_IDENTITY("sip:mamadou@"DOMAIN),
@ -299,7 +302,7 @@ void test_stack()
TSIP_STACK_SET_DEVICE_ID("dd1289fa-c3d7-47bd-a40d-f1f1b2cc5ffc"),
TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"),
TSIP_STACK_SET_PRIVACY("header;id"),
*/
TSIP_STACK_SET_NULL());
tsip_operation_handle_t *op = TSIP_OPERATION_CREATE(stack,
@ -322,18 +325,18 @@ void test_stack()
tsk_thread_sleep(1000);
///* SUBSCRIBE */
//{
// tsip_operation_handle_t *op2 = TSIP_OPERATION_CREATE(stack,
// TSIP_OPERATION_SET_HEADER("expires", "30"),
// TSIP_OPERATION_SET_HEADER("Event", "reg"),
// TSIP_OPERATION_SET_HEADER("Accept", "application/reginfo+xml"),
// TSIP_OPERATION_SET_HEADER("Allow-Events", "refer, presence, presence.winfo, xcap-diff"),
// TSIP_OPERATION_SET_HEADER("Allow", "INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER"),
//
// TSIP_OPERATION_SET_NULL());
// tsip_subscribe(stack, op2);
//}
/* SUBSCRIBE */
{
tsip_operation_handle_t *op2 = TSIP_OPERATION_CREATE(stack,
TSIP_OPERATION_SET_HEADER("expires", "30"),
TSIP_OPERATION_SET_HEADER("Event", "reg"),
TSIP_OPERATION_SET_HEADER("Accept", "application/reginfo+xml"),
TSIP_OPERATION_SET_HEADER("Allow-Events", "refer, presence, presence.winfo, xcap-diff"),
TSIP_OPERATION_SET_HEADER("Allow", "INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER"),
TSIP_OPERATION_SET_NULL());
tsip_subscribe(stack, op2);
}
/* MESSAGE */
//{

View File

@ -338,7 +338,7 @@
</References>
<Files>
<Filter
Name="source"
Name="source(*.c)"
>
<File
RelativePath="..\..\tinyHTTP\src\thttp.c"
@ -422,7 +422,7 @@
</Filter>
</Filter>
<Filter
Name="include"
Name="include(*.h)"
>
<File
RelativePath="..\..\tinyHTTP\include\thttp.h"
@ -510,7 +510,7 @@
</Filter>
</Filter>
<Filter
Name="abnf"
Name="abnf(*.abnf)"
>
<File
RelativePath="..\..\tinyHTTP\abnf\http.abnf"
@ -526,7 +526,7 @@
</File>
</Filter>
<Filter
Name="ragel"
Name="ragel(*.rl)"
>
<File
RelativePath="..\..\tinyHTTP\ragel\thttp_machine_header.rl"

View File

@ -7,6 +7,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySAK", "..\tinySAK\tinyS
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyNET", "..\tinyNET\tinyNET.vcproj", "{7522A458-92F4-4259-B906-E84C2A65D9F1}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyHTTP", "..\tinyHTTP\tinyHTTP.vcproj", "{B3E45009-C7C3-4090-837C-2D30C9058443}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@ -41,6 +45,22 @@ Global
{7522A458-92F4-4259-B906-E84C2A65D9F1}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{7522A458-92F4-4259-B906-E84C2A65D9F1}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{7522A458-92F4-4259-B906-E84C2A65D9F1}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}.Debug|Win32.ActiveCfg = Debug|Win32
{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}.Debug|Win32.Build.0 = Debug|Win32
{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Win32
{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}.Release|Win32.ActiveCfg = Release|Win32
{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}.Release|Win32.Build.0 = Release|Win32
{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Win32
{B3E45009-C7C3-4090-837C-2D30C9058443}.Debug|Win32.ActiveCfg = Debug|Win32
{B3E45009-C7C3-4090-837C-2D30C9058443}.Debug|Win32.Build.0 = Debug|Win32
{B3E45009-C7C3-4090-837C-2D30C9058443}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{B3E45009-C7C3-4090-837C-2D30C9058443}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{B3E45009-C7C3-4090-837C-2D30C9058443}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{B3E45009-C7C3-4090-837C-2D30C9058443}.Release|Win32.ActiveCfg = Release|Win32
{B3E45009-C7C3-4090-837C-2D30C9058443}.Release|Win32.Build.0 = Release|Win32
{B3E45009-C7C3-4090-837C-2D30C9058443}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{B3E45009-C7C3-4090-837C-2D30C9058443}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{B3E45009-C7C3-4090-837C-2D30C9058443}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -40,13 +40,16 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(DOUBANGO_HOME)\tinyMSRP\include&quot;;&quot;$(DOUBANGO_HOME)\tinyHTTP\include&quot;;&quot;$(DOUBANGO_HOME)\tinySAK\src&quot;;&quot;$(DOUBANGO_HOME)\thirdparties\win32\include&quot;"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TINYMSRP_EXPORTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@ -59,6 +62,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(OutDir)\tinySAK.lib $(OutDir)\tinyNET.lib $(OutDir)\tinyHTTP.lib"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
@ -121,7 +125,9 @@
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@ -171,25 +177,117 @@
</References>
<Files>
<Filter
Name="include"
Name="include(*.h)"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\tinyMSRP\src\tinyMSRP_config.h"
RelativePath="..\..\tinyMSRP\include\tinyMSRP_config.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\tmsrp.h"
RelativePath="..\..\tinyMSRP\include\tmsrp.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\tmsrp_message.h"
RelativePath="..\..\tinyMSRP\include\tinyMSRP\tmsrp_message.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\tmsrp_uri.h"
>
</File>
<Filter
Name="headers"
>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Authentication-Info.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Authorization.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Byte-Range.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Content-Type.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Dummy.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Expires.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Failure-Report.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_From-Path.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Max-Expires.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Message-ID.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Min-Expires.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Status.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Success-Report.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_To-Path.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_Use-Path.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\headers\tmsrp_header_WWW-Authenticate.h"
>
</File>
</Filter>
<Filter
Name="parsers"
>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\parsers\tmsrp_parser_header.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\parsers\tmsrp_parser_message.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\include\tinyMSRP\parsers\tmsrp_parser_uri.h"
>
</File>
</Filter>
</Filter>
<Filter
Name="source"
Name="source(*.c)"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
@ -201,6 +299,174 @@
RelativePath="..\..\tinyMSRP\src\tmsrp_message.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\tmsrp_uri.c"
>
</File>
<Filter
Name="headers"
>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Authentication-Info.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Authorization.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Byte-Range.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Content-Type.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Dummy.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Expires.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Failure-Report.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_From-Path.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Max-Expires.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Message-ID.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Min-Expires.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Status.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Success-Report.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_To-Path.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_Use-Path.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\headers\tmsrp_header_WWW-Authenticate.c"
>
</File>
</Filter>
<Filter
Name="parsers"
>
<File
RelativePath="..\..\tinyMSRP\src\parsers\tmsrp_parser_message.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\src\parsers\tmsrp_parser_uri.c"
>
</File>
</Filter>
</Filter>
<Filter
Name="abnf(*.abnf)"
>
</Filter>
<Filter
Name="ragel(*.rl)"
>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_machine_utils.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Authentication-Info.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Authorization.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Byte-Range.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Content-Type.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Dummy.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Expires.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Failure-Report.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_From-Path.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Max-Expires.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Message-ID.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Min-Expires.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Status.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Success-Report.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_To-Path.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_header_Use-Path.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_message.rl"
>
</File>
<File
RelativePath="..\..\tinyMSRP\ragel\tmsrp_parser_uri.rl"
>
</File>
</Filter>
</Files>
<Globals>

View File

@ -52,6 +52,7 @@
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@ -209,7 +210,9 @@
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="0"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@ -339,7 +342,7 @@
</References>
<Files>
<Filter
Name="source"
Name="source(*.c)"
>
<File
RelativePath="..\..\tinyNET\src\tnet.c"
@ -527,7 +530,7 @@
</Filter>
</Filter>
<Filter
Name="include"
Name="include(*.h)"
>
<File
RelativePath="..\..\tinyNET\src\tinyNET_config.h"

View File

@ -341,7 +341,7 @@
</References>
<Files>
<Filter
Name="include"
Name="include(*.h)"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
@ -467,7 +467,7 @@
</File>
</Filter>
<Filter
Name="source"
Name="source(*.c)"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>

View File

@ -0,0 +1,220 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="test"
ProjectGUID="{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}"
RootNamespace="test"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(DOUBANGO_HOME)\thirdparties\win32\include&quot;;&quot;$(DOUBANGO_HOME)\\tinySDP\include&quot;;&quot;$(DOUBANGO_HOME)\tinySAK\src&quot;"
PreprocessorDefinitions="DEBUG_LEVEL=DEBUG_LEVEL_INFO;WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(OutDir)\tinySAK.lib $(OutDir)\tinySDP.lib"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="source"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\tinySDP\test\stdafx.c"
>
</File>
<File
RelativePath="..\..\tinySDP\test\test.c"
>
</File>
</Filter>
<Filter
Name="include"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\tinySDP\test\stdafx.h"
>
</File>
<File
RelativePath="..\..\tinySDP\test\targetver.h"
>
</File>
</Filter>
<Filter
Name="tests"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath="..\..\tinySDP\test\test_parser.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -0,0 +1,44 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySDP", "tinySDP.vcproj", "{E45DB518-6562-4033-80E8-60030F0B169F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySAK", "..\tinySAK\tinySAK.vcproj", "{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
Release|Win32 = Release|Win32
Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E45DB518-6562-4033-80E8-60030F0B169F}.Debug|Win32.ActiveCfg = Debug|Win32
{E45DB518-6562-4033-80E8-60030F0B169F}.Debug|Win32.Build.0 = Debug|Win32
{E45DB518-6562-4033-80E8-60030F0B169F}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Win32
{E45DB518-6562-4033-80E8-60030F0B169F}.Release|Win32.ActiveCfg = Release|Win32
{E45DB518-6562-4033-80E8-60030F0B169F}.Release|Win32.Build.0 = Release|Win32
{E45DB518-6562-4033-80E8-60030F0B169F}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Win32
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Debug|Win32.ActiveCfg = Debug|Win32
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Debug|Win32.Build.0 = Debug|Win32
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Release|Win32.ActiveCfg = Release|Win32
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Release|Win32.Build.0 = Release|Win32
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{6BC9B796-10C6-4CF7-A6E4-E2DACCDA84DA}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}.Debug|Win32.ActiveCfg = Debug|Win32
{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}.Debug|Win32.Build.0 = Debug|Win32
{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Win32
{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}.Release|Win32.ActiveCfg = Release|Win32
{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}.Release|Win32.Build.0 = Release|Win32
{4555F4A7-6DC7-4844-9F3F-6AAB4443D4E9}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,462 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="tinySDP"
ProjectGUID="{E45DB518-6562-4033-80E8-60030F0B169F}"
RootNamespace="tinySDP"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(DOUBANGO_HOME)\thirdparties\win32\include&quot;;&quot;$(DOUBANGO_HOME)\tinySAK\src&quot;;&quot;$(DOUBANGO_HOME)\tinySDP\include&quot;"
PreprocessorDefinitions="DEBUG_LEVEL=DEBUG_LEVEL_INFO;WIN32;_DEBUG;_WINDOWS;_USRDLL;TINYSDP_EXPORTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(OutDir)\tinySAK.lib"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TINYSDP_EXPORTS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="source(*.c)"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\tinySDP\src\tsdp.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\tsdp_message.c"
>
</File>
<Filter
Name="headers"
>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_A.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_B.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_C.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_Dummy.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_E.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_I.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_K.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_M.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_O.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_P.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_R.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_S.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_T.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_U.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_V.c"
>
</File>
<File
RelativePath="..\..\tinySDP\src\headers\tsdp_header_Z.c"
>
</File>
</Filter>
<Filter
Name="parsers"
>
<File
RelativePath="..\..\tinySDP\src\parsers\tsdp_parser_message.c"
>
</File>
</Filter>
</Filter>
<Filter
Name="include(*.h)"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\tinySDP\include\tinysdp_config.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tsdp.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\tsdp_message.h"
>
</File>
<Filter
Name="headers"
>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_A.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_B.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_C.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_Dummy.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_E.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_I.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_K.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_M.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_O.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_P.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_R.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_S.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_T.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_U.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_V.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\headers\tsdp_header_Z.h"
>
</File>
</Filter>
<Filter
Name="parsers"
>
<File
RelativePath="..\..\tinySDP\include\tinySDP\parsers\tsdp_parser_header.h"
>
</File>
<File
RelativePath="..\..\tinySDP\include\tinySDP\parsers\tsdp_parser_message.h"
>
</File>
</Filter>
</Filter>
<Filter
Name="ragel(*.rl)"
>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_machine_utils.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_A.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_B.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_C.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_Dummy.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_E.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_I.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_K.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_M.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_O.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_P.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_R.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_S.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_T.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_U.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_V.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_header_Z.rl"
>
</File>
<File
RelativePath="..\..\tinySDP\ragel\tsdp_parser_message.rl"
>
</File>
</Filter>
<Filter
Name="abnf(*.abnf)"
>
<File
RelativePath="..\..\tinySDP\abnf\sdp.abnf"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>