summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-10-30 17:42:20 +0200
committerMarcel Holtmann <marcel@holtmann.org>2010-10-30 17:42:20 +0200
commitd706f4948c2c9634944598b989385c449ed19591 (patch)
treecc5b9295f83c85a593f8aa233fdcae7b523ca70f
parent0cf645de11adcd07a894dab4ea51356ceb490fe6 (diff)
downloadconnman-d706f4948c2c9634944598b989385c449ed19591.tar.gz
connman-d706f4948c2c9634944598b989385c449ed19591.tar.bz2
connman-d706f4948c2c9634944598b989385c449ed19591.zip
Add support for GWeb requests with IP address only URL
-rw-r--r--gweb/gweb.c39
1 files changed, 31 insertions, 8 deletions
diff --git a/gweb/gweb.c b/gweb/gweb.c
index 4de66a55..5aa06973 100644
--- a/gweb/gweb.c
+++ b/gweb/gweb.c
@@ -342,6 +342,20 @@ static int connect_session_transport(struct web_session *session)
return 0;
}
+static int create_transport(struct web_session *session)
+{
+ int err;
+
+ err = connect_session_transport(session);
+ if (err < 0)
+ return err;
+
+ debug(session->web, "creating session %s:%u",
+ session->address, session->port);
+
+ return 0;
+}
+
static void start_request(struct web_session *session)
{
GString *buf;
@@ -361,6 +375,7 @@ static void start_request(struct web_session *session)
if (session->web->accept_option != NULL)
g_string_append_printf(buf, "Accept: %s\r\n",
session->web->accept_option);
+ g_string_append(buf, "Connection: close\r\n");
g_string_append(buf, "\r\n");
str = g_string_free(buf, FALSE);
@@ -451,15 +466,12 @@ static void resolv_result(GResolvResultStatus status,
session->address = g_strdup(results[0]);
- if (connect_session_transport(session) < 0) {
+ if (create_transport(session) < 0) {
if (session->result_func != NULL)
session->result_func(409, NULL, session->result_data);
return;
}
- debug(session->web, "creating session %s:%u",
- session->address, session->port);
-
start_request(session);
}
@@ -490,11 +502,22 @@ guint g_web_request(GWeb *web, GWebMethod method, const char *url,
session->result_func = func;
session->result_data = user_data;
- session->resolv_action = g_resolv_lookup_hostname(web->resolv,
+ if (inet_aton(session->host, NULL) == 0) {
+ session->resolv_action = g_resolv_lookup_hostname(web->resolv,
session->host, resolv_result, session);
- if (session->resolv_action == 0) {
- free_session(session);
- return 0;
+ if (session->resolv_action == 0) {
+ free_session(session);
+ return 0;
+ }
+ } else {
+ session->address = g_strdup(session->host);
+
+ if (create_transport(session) < 0) {
+ free_session(session);
+ return 0;
+ }
+
+ start_request(session);
}
web->session_list = g_list_append(web->session_list, session);