# include <signal.h>
# include <sys/time.h>
# include <sys/resource.h>
+# include <sys/utsname.h>
#endif /* WIN32 */
#ifdef HAVE_POLL
# include <poll.h>
*/
if (!http->fields[HTTP_FIELD_USER_AGENT][0])
- httpSetField(http, HTTP_FIELD_USER_AGENT,
- http->default_user_agent ? http->default_user_agent :
- CUPS_MINIMAL);
+ {
+ if (http->default_user_agent)
+ {
+ httpSetField(http, HTTP_FIELD_USER_AGENT, http->default_user_agent);
+ }
+ else
+ {
+#ifdef WIN32
+ SYSTEM_INFO sysinfo; /* System information */
+ OSVERSIONEX version; /* OS version info */
+
+ version.dwOSVersionInfoSize = sizeof(OSVERSIONEX);
+ GetVersionInfoEx(&version);
+ GetNativeSystemInfo(&sysinfo);
+
+ snprintf(buf, sizeof(buf), CUPS_MINIMAL " (Windows %d.%d; %s) IPP/2.0",
+ version.major, version.minor,
+ sysinfo.wProcessorArchitecture
+ == PROCESSOR_ARCHITECTURE_AMD64 ? "amd64" :
+ sysinfo.wProcessorArchitecture
+ == PROCESSOR_ARCHITECTURE_ARM ? "arm" :
+ sysinfo.wProcessorArchitecture
+ == PROCESSOR_ARCHITECTURE_IA64 ? "ia64" :
+ sysinfo.wProcessorArchitecture
+ == PROCESSOR_ARCHITECTURE_INTEL ? "intel" :
+ "unknown");
+
+#else
+ struct utsname name; /* uname info */
+
+ uname(&name);
+
+ snprintf(buf, sizeof(buf), CUPS_MINIMAL " (%s %s; %s) IPP/2.0",
+ name.sysname, name.release, name.machine);
+#endif /* WIN32 */
+
+ DEBUG_printf(("8http_send: Default User-Agent: %s", buf));
+ httpSetField(http, HTTP_FIELD_USER_AGENT, buf);
+ }
+ }
/*
* Set the Accept-Encoding field if it isn't already...
cupsdSetString(&Printcap, CUPS_DEFAULT_PRINTCAP);
cupsdSetString(&FontPath, CUPS_FONTPATH);
cupsdSetString(&RemoteRoot, "remroot");
- cupsdSetStringf(&ServerHeader, "CUPS/%d.%d", CUPS_VERSION_MAJOR,
+ cupsdSetStringf(&ServerHeader, "CUPS/%d.%d IPP/2.1", CUPS_VERSION_MAJOR,
CUPS_VERSION_MINOR);
cupsdSetString(&StateDir, CUPS_STATEDIR);
uname(&plat);
if (!_cups_strcasecmp(value, "ProductOnly"))
- cupsdSetString(&ServerHeader, "CUPS");
+ cupsdSetString(&ServerHeader, "CUPS IPP");
else if (!_cups_strcasecmp(value, "Major"))
- cupsdSetStringf(&ServerHeader, "CUPS/%d", CUPS_VERSION_MAJOR);
+ cupsdSetStringf(&ServerHeader, "CUPS/%d IPP/2", CUPS_VERSION_MAJOR);
else if (!_cups_strcasecmp(value, "Minor"))
- cupsdSetStringf(&ServerHeader, "CUPS/%d.%d", CUPS_VERSION_MAJOR,
+ cupsdSetStringf(&ServerHeader, "CUPS/%d.%d IPP/2.1", CUPS_VERSION_MAJOR,
CUPS_VERSION_MINOR);
else if (!_cups_strcasecmp(value, "Minimal"))
- cupsdSetString(&ServerHeader, CUPS_MINIMAL);
+ cupsdSetString(&ServerHeader, CUPS_MINIMAL " IPP/2.1");
else if (!_cups_strcasecmp(value, "OS"))
- cupsdSetStringf(&ServerHeader, CUPS_MINIMAL " (%s)", plat.sysname);
+ cupsdSetStringf(&ServerHeader, CUPS_MINIMAL " (%s %s) IPP/2.1",
+ plat.sysname, plat.release);
else if (!_cups_strcasecmp(value, "Full"))
- cupsdSetStringf(&ServerHeader, CUPS_MINIMAL " (%s) IPP/2.1",
- plat.sysname);
+ cupsdSetStringf(&ServerHeader, CUPS_MINIMAL " (%s %s; %s) IPP/2.1",
+ plat.sysname, plat.release, plat.machine);
else if (!_cups_strcasecmp(value, "None"))
cupsdClearString(&ServerHeader);
else