From 5426a708a9010d04cf8baed45ce9909a09088ef6 Mon Sep 17 00:00:00 2001 From: Rob Kendrick Date: Tue, 30 Jan 2007 19:51:54 +0000 Subject: Generates and use a User-Agent: string based on new netsurf_version_major/minor values, and results of uname(). svn path=/trunk/netsurf/; revision=3158 --- utils/utils.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'utils/utils.c') diff --git a/utils/utils.c b/utils/utils.c index b0707b7f2..54a3020ae 100644 --- a/utils/utils.c +++ b/utils/utils.c @@ -2,6 +2,7 @@ * This file is part of NetSurf, http://netsurf-browser.org/ * Licensed under the GNU General Public License, * http://www.opensource.org/licenses/gpl-license + * Copyright 2007 Rob Kendrick * Copyright 2004-2007 James Bursa * Copyright 2003 Phil Mellor * Copyright 2003 John M Bell @@ -15,6 +16,8 @@ #include #include #include +#include +#include #include #include #include "netsurf/utils/config.h" @@ -23,6 +26,7 @@ #include "netsurf/utils/messages.h" #include "netsurf/utils/utf8.h" #include "netsurf/utils/utils.h" +#include "netsurf/desktop/netsurf.h" char * strip(char * const s) @@ -254,6 +258,37 @@ unsigned int wallclock(void) return ((tv.tv_sec * 100) + (tv.tv_usec / 10000)); } +/** Generate a string suitable for use as a user agent in HTTP requests. + * + * \return heap-allocated result string, or NULL if the allocation failed. + */ +#define UA_BUF_SIZE 128 +char *make_useragent(void) +{ + struct utsname un; + char ua_name[UA_BUF_SIZE]; + char ua_machine[UA_BUF_SIZE]; + char *r; + + snprintf(ua_name, UA_BUF_SIZE, "NetSurf/%d.%d", + netsurf_version_major, + netsurf_version_minor); + + if (uname(&un) != 0) { + strncpy(ua_machine, "unknown machine", UA_BUF_SIZE); + } else { + snprintf(ua_machine, UA_BUF_SIZE, "(%s; %s)", un.sysname, + un.machine); + } + + if ((r = malloc(strlen(ua_name) + strlen(ua_machine) + 2)) == NULL) + return NULL; + + sprintf(r, "%s %s", ua_name, ua_machine); + + return r; +} + #ifdef __FreeBSD__ /** -- cgit v1.2.3