From d2922f53fccf09cf0834ce47727ec00af070851c Mon Sep 17 00:00:00 2001 From: mom040267 Date: Tue, 2 Dec 2014 08:02:05 +0000 Subject: [PATCH] separate http-related code module --- Makefile.in | 2 +- src/apps/relay/http_server.c | 58 ++++++++++++++++++++++++++++++++++++ src/server/ns_turn_ioalib.h | 5 ++++ src/server/ns_turn_server.c | 32 +++----------------- 4 files changed, 68 insertions(+), 29 deletions(-) create mode 100644 src/apps/relay/http_server.c diff --git a/Makefile.in b/Makefile.in index 0426fe1..bae43e1 100755 --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,7 @@ COMMON_MODS = src/apps/common/apputils.c src/apps/common/ns_turn_utils.c src/app COMMON_DEPS = ${LIBCLIENTTURN_DEPS} ${COMMON_MODS} ${COMMON_HEADERS} IMPL_HEADERS = src/apps/relay/ns_ioalib_impl.h src/apps/relay/ns_sm.h src/apps/relay/turn_ports.h -IMPL_MODS = src/apps/relay/ns_ioalib_engine_impl.c src/apps/relay/turn_ports.c +IMPL_MODS = src/apps/relay/ns_ioalib_engine_impl.c src/apps/relay/turn_ports.c src/apps/relay/http_server.c IMPL_DEPS = ${COMMON_DEPS} ${IMPL_HEADERS} ${IMPL_MODS} HIREDIS_HEADERS = src/apps/common/hiredis_libevent2.h diff --git a/src/apps/relay/http_server.c b/src/apps/relay/http_server.c new file mode 100644 index 0000000..bcb78d3 --- /dev/null +++ b/src/apps/relay/http_server.c @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2011, 2012, 2013 Citrix Systems + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "ns_ioalib_impl.h" + +void write_http_echo(ts_ur_super_session *ss) +{ + if(ss && ss->client_socket && !(ss->to_be_closed)) { + turn_turnserver *server = (turn_turnserver *)ss->server; + if(server) { + ioa_network_buffer_handle nbh_http = ioa_network_buffer_allocate(server->e); + size_t len_http = ioa_network_buffer_get_size(nbh_http); + u08bits *data = ioa_network_buffer_data(nbh_http); + char data_http[1025]; + char content_http[1025]; + const char* title = "TURN Server"; + snprintf(content_http,sizeof(content_http)-1,"\r\n\r\n \r\n %s\r\n \r\n \r\n %s\r\n \r\n\r\n",title,title); + snprintf(data_http,sizeof(data_http)-1,"HTTP/1.1 200 OK\r\nServer: %s\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Length: %d\r\n\r\n%s",TURN_SOFTWARE,(int)strlen(content_http),content_http); + len_http = strlen(data_http); + ns_bcopy(data_http,data,len_http); + ioa_network_buffer_set_size(nbh_http,len_http); + send_data_from_ioa_socket_nbh(ss->client_socket, NULL, nbh_http, TTL_IGNORE, TOS_IGNORE); + } + } +} + +void handle_https(ts_ur_super_session *ss, ioa_network_buffer_handle nbh) { + //TODO + UNUSED_ARG(nbh); + write_http_echo(ss); +} diff --git a/src/server/ns_turn_ioalib.h b/src/server/ns_turn_ioalib.h index fb70397..4b28cfc 100644 --- a/src/server/ns_turn_ioalib.h +++ b/src/server/ns_turn_ioalib.h @@ -276,6 +276,11 @@ void get_realm_options_by_name(char *realm, realm_options_t* ro); int get_canonic_origin(const char* o, char *co, int sz); int get_default_protocol_port(const char* scheme, size_t slen); +///////////// HTTP //////////////////// + +void write_http_echo(ts_ur_super_session *ss); +void handle_https(ts_ur_super_session *ss, ioa_network_buffer_handle nbh); + /////////////////////////////////////// #ifdef __cplusplus diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index d50a70c..1f85113 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -4400,30 +4400,6 @@ static int refresh_relay_connection(turn_turnserver* server, } } -static void write_http_echo(turn_turnserver *server, ts_ur_super_session *ss) -{ - if(server && ss && ss->client_socket && !(ss->to_be_closed)) { - ioa_network_buffer_handle nbh_http = ioa_network_buffer_allocate(server->e); - size_t len_http = ioa_network_buffer_get_size(nbh_http); - u08bits *data = ioa_network_buffer_data(nbh_http); - char data_http[1025]; - char content_http[1025]; - const char* title = "TURN Server"; - snprintf(content_http,sizeof(content_http)-1,"\r\n\r\n \r\n %s\r\n \r\n \r\n %s\r\n \r\n\r\n",title,title); - snprintf(data_http,sizeof(data_http)-1,"HTTP/1.1 200 OK\r\nServer: %s\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Length: %d\r\n\r\n%s",TURN_SOFTWARE,(int)strlen(content_http),content_http); - len_http = strlen(data_http); - ns_bcopy(data_http,data,len_http); - ioa_network_buffer_set_size(nbh_http,len_http); - send_data_from_ioa_socket_nbh(ss->client_socket, NULL, nbh_http, TTL_IGNORE, TOS_IGNORE); - } -} - -static void handle_https(turn_turnserver *server, ts_ur_super_session *ss, ioa_network_buffer_handle nbh) { - //TODO - UNUSED_ARG(nbh); - write_http_echo(server,ss); -} - static int read_client_connection(turn_turnserver *server, ts_ur_super_session *ss, ioa_net_data *in_buffer, int can_resume, int count_usage) { @@ -4466,12 +4442,12 @@ static int read_client_connection(turn_turnserver *server, if(sat == HTTP_CLIENT_SOCKET) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: HTTP connection input: %s\n", __FUNCTION__, (char*)ioa_network_buffer_data(in_buffer->nbh)); - write_http_echo(server,ss); + write_http_echo(ss); } else if(sat == HTTPS_CLIENT_SOCKET) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: HTTPS connection input: %s\n", __FUNCTION__, (char*)ioa_network_buffer_data(in_buffer->nbh)); - handle_https(server,ss,in_buffer->nbh); + handle_https(ss,in_buffer->nbh); } else if (stun_is_channel_message_str(ioa_network_buffer_data(in_buffer->nbh), &blen, @@ -4566,11 +4542,11 @@ static int read_client_connection(turn_turnserver *server, proto = "HTTPS"; set_ioa_socket_app_type(ss->client_socket,HTTPS_CLIENT_SOCKET); TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s (%s %s) request: %s\n", __FUNCTION__, proto, get_ioa_socket_cipher(ss->client_socket), get_ioa_socket_ssl_method(ss->client_socket), (char*)ioa_network_buffer_data(in_buffer->nbh)); - handle_https(server,ss,in_buffer->nbh); + handle_https(ss,in_buffer->nbh); } else { set_ioa_socket_app_type(ss->client_socket,HTTP_CLIENT_SOCKET); TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: %s request: %s\n", __FUNCTION__, proto, (char*)ioa_network_buffer_data(in_buffer->nbh)); - write_http_echo(server,ss); + write_http_echo(ss); } } }