doubango/tinyMSRP/test/test/test_parser.h

151 lines
4.7 KiB
C
Executable File

/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou(at)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.
*
*/
#ifndef _TEST_MSRPPARSER_H
#define _TEST_MSRPPARSER_H
#include "tinymsrp/headers/tmsrp_header_Dummy.h"
#define MSRP_MSG_REQUEST \
"MSRP a786hjs2 SEND\r\n" \
"To-Path: msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp\r\n" \
"From-Path: msrp://atlanta.example.com:7654/jshA7weztas;tcp\r\n" \
"Message-ID: 87652491\r\n" \
"Byte-Dummy: 1-25/25\r\n" \
"Byte-Range: 1-5/3\r\n" \
"Byte-Range: 1-25/*\r\n" \
"Byte-Range: 1-*/*\r\n" \
"Failure-Report: partial\r\n" \
"Success-Report: yes\r\n" \
"Content-Type: text/plain;charset=utf8\r\n" \
"\r\n" \
"ab\r\nc\r\n" \
"-------a786hjs2$\r\nMSRP"
#define MSRP_MSG_RESPONSE \
"MSRP a786hjs2 200 OK\r\n" \
"To-Path: msrp://atlanta.example.com:7654/jshA7weztas;tcp\r\n" \
"From-Path: msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp\r\n" \
"-------a786hjs2$\r\nMSRP 000"
#define MSRP_MSG_REPORT \
"MSRP dkei38sd REPORT\r\n" \
"To-Path: msrp://alicepc.example.com:7777/iau39soe2843z;tcp\r\n" \
"From-Path: msrp://bob.example.com:8888/9di4eae923wzd;tcp\r\n" \
"Message-ID: 12339sdqwer\r\n" \
"Byte-Range: 1-106/106\r\n" \
"Status: 000 200 OK\r\n" \
"-------dkei38sd$\r\nMSRP 000"
#define MSRP_MSG_TO_TEST MSRP_MSG_REQUEST
void test_parser()
{
tmsrp_message_t *message;
const tmsrp_header_Dummy_t* header;
size_t msg_size;
char* str;
//
// Serialization / Deserialization
//
/* deserialize the message */
if((message = tmsrp_message_parse_2(MSRP_MSG_TO_TEST, strlen(MSRP_MSG_TO_TEST), &msg_size))) {
tmsrp_message_add_headers(message,
TMSRP_HEADER_DUMMY_VA_ARGS("NS", "imdn <urn:ietf:params:imdn>"),
TMSRP_HEADER_DUMMY_VA_ARGS("imdn.Message-ID", "MsgiQqFZqTYAA"),
TMSRP_HEADER_DUMMY_VA_ARGS("DateTime", "2012-10-25T18:02:08.000Z"),
TMSRP_HEADER_DUMMY_VA_ARGS("imdn.Disposition-Notification", "positive-delivery, display"),
tsk_null);
if((header = (const tmsrp_header_Dummy_t*)tmsrp_message_get_headerByName(message, "NS"))) {
TSK_DEBUG_INFO("NS=%s\n", header->value);
}
if((header = (const tmsrp_header_Dummy_t*)tmsrp_message_get_headerByName(message, "imdn.Message-ID"))) {
TSK_DEBUG_INFO("imdn.Message-ID=%s\n", header->value);
}
/* serialize the message */
if((str = tmsrp_message_tostring(message))) {
TSK_DEBUG_INFO("\nMSRP Message=\n%s\n\n", str);
TSK_FREE(str);
}
}
else {
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)))) {
tmsrp_response_t* response = tmsrp_create_response(message, 202, "Accepted");
if((str = tmsrp_message_tostring(response))) {
TSK_DEBUG_INFO("\nMSRP Response=\n%s\n\n", str);
TSK_FREE(str);
}
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)))) {
tmsrp_request_t* report = tmsrp_create_report(message, 403, "Stop-sending-message");
if((str = tmsrp_message_tostring(report))) {
TSK_DEBUG_INFO("\nMSRP Response=\n%s\n\n", str);
TSK_FREE(str);
}
TSK_OBJECT_SAFE_FREE(report);
}
else {
TSK_DEBUG_ERROR("Failed to parse MSRP message(2).");
}
TSK_OBJECT_SAFE_FREE(message);
//
// Create bodiless Request
//
{
tmsrp_request_t* bodiless = tmsrp_create_bodiless(tsk_null, tsk_null);
if((str = tmsrp_message_tostring(bodiless))) {
TSK_DEBUG_INFO("\nMSRP Bodiless=\n%s\n\n", str);
TSK_FREE(str);
}
TSK_OBJECT_SAFE_FREE(bodiless);
}
}
#endif /* _TEST_MSRPPARSER_H */