doubango/tinyHTTP/test/test_stack.h
c732d49e
 /*
 * Copyright (C) 2009 Mamadou Diop.
 *
 * Contact: Mamadou Diop <diopmamadou(at)doubango.org>
 *	
 * This file is part of Open Source Doubango Framework.
 *
 * DOUBANGO is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *	
 * DOUBANGO is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *	
 * You should have received a copy of the GNU General Public License
 * along with DOUBANGO.
 *
 */
 #ifndef _TEST_STACK_H_
 #define _TEST_STACK_H_
 
 int test_stack_callback(const thttp_event_t *httpevent)
 {
 	thttp_session_id_t id = thttp_session_get_id(httpevent->session);
 	switch(httpevent->type){
 		case thttp_event_message: /* New HTTP message */
 			{
 				TSK_DEBUG_INFO("sid=%llu", id);
 				if(THTTP_MESSAGE_IS_RESPONSE(httpevent->message)){
 					const thttp_header_ETag_t* etag;
 					TSK_DEBUG_INFO("=== %d ==> %s", THTTP_RESPONSE_CODE(httpevent->message), THTTP_MESSAGE_CONTENT(httpevent->message));
 					// You can use 
 					if((etag = (const thttp_header_ETag_t*)thttp_message_get_header(httpevent->message, thttp_htype_ETag))){
 						TSK_DEBUG_INFO("Etag=%s", etag->value);
 					}
 				}
 				else{
 					if(THTTP_MESSAGE_IS_RESPONSE(httpevent->message)){
 						TSK_DEBUG_INFO("=== code ==> %u", THTTP_RESPONSE_CODE(httpevent->message));
 					}
 				}
 				break;
 			}
 
 		case thttp_event_auth_failed:
 			{
 				TSK_DEBUG_INFO("auth failed sid=%llu", id);
 				break;
 			}
 
 		case thttp_event_closed: /* HTTP connection closed (informational) */
 			{
 				TSK_DEBUG_INFO("closed sid=%llu", id);
 				break;
 			}
 
 		case thttp_event_transport_error: /* HTTP connection closed (informational) */
 			{
 				TSK_DEBUG_INFO("Transport sid=%llu", id);
 				break;
 			}
 	}
 	
 	return 0;
 }
 
 #define PAYLOAD "<entry uri=\"sip:samba@micromethod.com\" xmlns=\"urn:ietf:params:xml:ns:resource-lists\">" \
 				"<display-name>samba</display-name>" \
 				"</entry>"
 
 void test_stack()
 {
 	thttp_session_handle_t *session = tsk_null;
 	int ret;
 
 	thttp_stack_handle_t* stack = thttp_stack_create(test_stack_callback,
 		THTTP_STACK_SET_TLS_ENABLED(tsk_true),
 		//THTTP_STACK_SET_TLS_CERTS_VERIFY(tsk_false),
 		//THTTP_STACK_SET_LOCAL_IP("0.0.0.0"),
 		//THTTP_STACK_SET_LOCAL_PORT(8080),
 		//THTTP_STACK_SET_PROXY("msp.f-secure.com", 443),
 
 		THTTP_STACK_SET_NULL());
 
 	if((ret = thttp_stack_start(stack))){
 		TSK_DEBUG_ERROR("Failed to start the HTTP/HTTPS stack.");
 		goto bail;
 	}
 	
 
 	// http://ipv6.google.com/
 	//op = THTTP_OPERATION_CREATE(stack,
 	//	THTTP_OPERATION_SET_PARAM("method", "GET"),
 	//	THTTP_OPERATION_SET_PARAM("URL", "http://siptest.doubango.org:8080/services/resource-lists/users/sip:mercuro1@doubango.org/index"),
 	//	
 	//	THTTP_OPERATION_SET_HEADER("Content-Type", "application/resource-lists+xml"),
 	//	THTTP_OPERATION_SET_HEADER("Pragma", "No-Cache"),
 	//	THTTP_OPERATION_SET_HEADER("Connection", "Keep-Alive"),
 	//	THTTP_OPERATION_SET_HEADER("User-Agent", "XDM-client/OMA1.1"),
 	//	THTTP_OPERATION_SET_HEADER("X-3GPP-Intended-Identity", "sip:mercuro1@doubango.org"),
 	//	
 	//	THTTP_OPERATION_SET_NULL());
 	//thttp_operation_perform(op);
 
 	/* creates session */
 	session = thttp_session_create(stack,
 		// session-level options
 		THTTP_SESSION_SET_OPTION(THTTP_SESSION_OPTION_TIMEOUT, "6000"),
 
 		// session-level headers
 		THTTP_SESSION_SET_HEADER("Pragma", "No-Cache"),
 		THTTP_SESSION_SET_HEADER("Connection", "Keep-Alive"),
 		// THTTP_SESSION_SET_HEADER("Connection", "close"),
 		THTTP_SESSION_SET_HEADER("User-Agent", "doubango 1.0"),
 		
 		THTTP_SESSION_SET_NULL()); /* MUST always be present */
 
 	//ret = thttp_action_GET(session, "http://siptest.doubango.org:8080/services/resource-lists/users/sip:mercuro1@doubango.org/index",
 	//	THTTP_ACTION_SET_HEADER("Content-Type", "application/resource-lists+xml"),
 	//	
 	//	tsk_null);
 
 	//getchar();
 
 	//thttp_action_GET(session, "http://siptest.doubango.org:8080/services/resource-lists/users/sip:mercuro1@doubango.org/index",
 	//	THTTP_ACTION_SET_HEADER("Content-Type", "application/resource-lists+xml"),
 	//	
 	//	tsk_null);
 
 	//getchar();
 
 	// HTTPS
 	thttp_action_GET(session, "https://msp.f-secure.com/web-test/common/test.html",
 		// action-level options
 		THTTP_ACTION_SET_OPTION(THTTP_ACTION_OPTION_TIMEOUT, "2500"),
 		
 		// action-level headers
 		THTTP_ACTION_SET_HEADER("User-Agent", "Doubango"),
 		THTTP_ACTION_SET_HEADER("Connection", "Keep-Alive"),
 		
 		THTTP_ACTION_SET_NULL());
 	getchar();
 	
 
 	// IPv6
 	/*thttp_action_GET(session, "http://ipv6.google.com",
 		// action-level options
 		THTTP_ACTION_SET_OPTION(THTTP_ACTION_OPTION_TIMEOUT, "2500"),
 		
 		// action-level headers
 		THTTP_ACTION_SET_HEADER("User-Agent", "XDM-client/OMA1.1"),
 		THTTP_ACTION_SET_HEADER("Connection", "Keep-Alive"),
 		
 		THTTP_ACTION_SET_NULL());
 	getchar();*/
 
 	/*ret = thttp_action_GET(session, "http://doubango.org",
 			// action-level options
 			THTTP_ACTION_SET_OPTION(THTTP_ACTION_OPTION_TIMEOUT, "2500"),
 			
 			THTTP_ACTION_SET_NULL());
 
 	getchar();*/
 
 	//thttp_action_GET(session, "http://www.google.com",
 		//THTTP_ACTION_SET_HEADER("Content-Type", "application/resource-lists+xml"),
 		
 	//	THTTP_ACTION_SET_NULL());
 
 	//thttp_action_GET(session, "http://www.doubango.org",
 		
 	//	THTTP_ACTION_SET_NULL());	
 
 	/* Gets resource-lists document */
 	/*thttp_action_GET(session, "http://siptest.doubango.org:8080/services/resource-lists/users/sip:mercuro1@doubango.org/index",
 		THTTP_ACTION_SET_HEADER("Content-Type", "application/resource-lists+xml"),
 		
 		tsk_null);
 
 	getchar();*/
 
 	//TSK_OBJECT_SAFE_FREE(session);
 
 	//getchar();
 
 	/* Gets xcap-caps document */
 	/*thttp_action_GET(session, "http://siptest.doubango.org:8080/services/xcap-caps/global/index",
 		THTTP_ACTION_SET_HEADER("Content-Type", "application/xcap-caps+xml"),
 		
 		tsk_null);
 
 	getchar();*/
 
 	/*thttp_action_GET(session, "http://siptest.doubango.org:8080/services/resource-lists/users/sip:mercuro1@doubango.org/properties-resource-list.xml",
 		THTTP_ACTION_SET_HEADER("Content-Type", "application/resource-lists+xml"),
 		
 		tsk_null);
 
 	getchar();*/
 
 	//thttp_operation_perform(op);
 
 /*
 	op = THTTP_OPERATION_CREATE(stack,
 		THTTP_OPERATION_SET_PARAM("method", "GET"),
 		//THTTP_OPERATION_SET_PARAM("URL", "https://msp.f-secure.com/web-test/common/test.html"),
 		THTTP_OPERATION_SET_PARAM("URL", "http://www.doubango.org"),
 		
 		THTTP_OPERATION_SET_HEADER("Pragma", "No-Cache"),
 		THTTP_OPERATION_SET_HEADER("Connection", "Keep-Alive"),
 		THTTP_OPERATION_SET_HEADER("User-Agent", "XDM-client/OMA1.1"),
 				
 		THTTP_OPERATION_SET_NULL());
 	thttp_operation_perform(op);
 */
 	/*thttp_operation_set(op,
 		THTTP_OPERATION_SET_PARAM("method", "HEAD"),
 		
 		THTTP_OPERATION_SET_NULL());
 	thttp_operation_perform(op);*/
 
 	getchar();
 bail:
 	TSK_OBJECT_SAFE_FREE(session);
 	TSK_OBJECT_SAFE_FREE(stack);
 }
 
 #endif /* _TEST_STACK_H_ */