Module Name: src Committed By: plunky Date: Fri Jun 24 18:50:33 UTC 2011
Modified Files: src/usr.bin/sdpquery: print.c Log Message: interpret "Basic Imaging Profile" attributes To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/usr.bin/sdpquery/print.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/sdpquery/print.c diff -u src/usr.bin/sdpquery/print.c:1.8 src/usr.bin/sdpquery/print.c:1.9 --- src/usr.bin/sdpquery/print.c:1.8 Tue May 24 12:44:30 2011 +++ src/usr.bin/sdpquery/print.c Fri Jun 24 18:50:32 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: print.c,v 1.8 2011/05/24 12:44:30 joerg Exp $ */ +/* $NetBSD: print.c,v 1.9 2011/06/24 18:50:32 plunky Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: print.c,v 1.8 2011/05/24 12:44:30 joerg Exp $"); +__RCSID("$NetBSD: print.c,v 1.9 2011/06/24 18:50:32 plunky Exp $"); #include <ctype.h> #include <iconv.h> @@ -77,8 +77,8 @@ static void print_uint8x(sdp_data_t *); static void print_uint16d(sdp_data_t *); static void print_uint16x(sdp_data_t *); -static void print_uint32x(sdp_data_t *); static void print_uint32d(sdp_data_t *); +static void print_uint32x(sdp_data_t *); static void print_uuid(sdp_data_t *); static void print_uuid_list(sdp_data_t *); static void print_string(sdp_data_t *); @@ -112,6 +112,10 @@ static void print_mas_types(sdp_data_t *); static void print_supported_repositories(sdp_data_t *); static void print_character_repertoires(sdp_data_t *); +static void print_bip_capabilities(sdp_data_t *); +static void print_bip_features(sdp_data_t *); +static void print_bip_functions(sdp_data_t *); +static void print_bip_capacity(sdp_data_t *); static void print_rfcomm(sdp_data_t *); static void print_bnep(sdp_data_t *); @@ -260,6 +264,13 @@ { 0x037a, "DeviceName", print_string }, }; +attr_t bi_attrs[] = { /* Basic Imaging */ + { 0x0310, "SupportedCapabilities", print_bip_capabilities }, + { 0x0311, "SupportedFeatures", print_bip_features }, + { 0x0312, "SupportedFunctions", print_bip_functions }, + { 0x0313, "TotalImagingDataCapacity", print_bip_capacity }, +}; + attr_t hf_attrs[] = { /* Handsfree */ { 0x0311, "SupportedFeatures", print_hf_features }, }; @@ -341,9 +352,9 @@ { 0x1118, "Direct Printing", NULL, 0 }, { 0x1119, "Reference Printing", A(bp_attrs) }, { 0x111a, "Imaging", NULL, 0 }, - { 0x111b, "Imaging Responder", NULL, 0 }, - { 0x111c, "Imaging Automatic Archive", NULL, 0 }, - { 0x111d, "Imaging Referenced Objects", NULL, 0 }, + { 0x111b, "Imaging Responder", A(bi_attrs) }, + { 0x111c, "Imaging Automatic Archive", A(bi_attrs) }, + { 0x111d, "Imaging Referenced Objects", A(bi_attrs) }, { 0x111e, "Handsfree", A(hf_attrs) }, { 0x111f, "Handsfree Audio Gateway", A(hfag_attrs) }, { 0x1120, "Direct Printing Reference Objects", NULL, 0 }, @@ -436,6 +447,19 @@ return true; } +static bool +sdp_get_uint64(sdp_data_t *d, uint64_t *vp) +{ + uintmax_t v; + + if (sdp_data_type(d) != SDP_DATA_UINT64 + || !sdp_get_uint(d, &v)) + return false; + + *vp = (uint64_t)v; + return true; +} + void print_record(sdp_data_t *rec) { @@ -1411,6 +1435,97 @@ } static void +print_bip_capabilities(sdp_data_t *data) +{ + uint8_t v; + + if (!sdp_get_uint8(data, &v)) + return; + + if (Nflag) + printf("(0x%02x)", v); + + printf("\n"); + if (v & (1<< 0)) printf(" Generic imaging\n"); + if (v & (1<< 1)) printf(" Capturing\n"); + if (v & (1<< 2)) printf(" Printing\n"); + if (v & (1<< 3)) printf(" Displaying\n"); +} + +static void +print_bip_features(sdp_data_t *data) +{ + uint16_t v; + + if (!sdp_get_uint16(data, &v)) + return; + + if (Nflag) + printf("(0x%04x)", v); + + printf("\n"); + if (v & (1<<0)) printf(" ImagePush\n"); + if (v & (1<<1)) printf(" ImagePush-Store\n"); + if (v & (1<<2)) printf(" ImagePush-Print\n"); + if (v & (1<<3)) printf(" ImagePush-Display\n"); + if (v & (1<<4)) printf(" ImagePull\n"); + if (v & (1<<5)) printf(" AdvancedImagePrinting\n"); + if (v & (1<<6)) printf(" AutomaticArchive\n"); + if (v & (1<<7)) printf(" RemoteCamera\n"); + if (v & (1<<8)) printf(" RemoteDisplay\n"); +} + +static void +print_bip_functions(sdp_data_t *data) +{ + uint32_t v; + + if (!sdp_get_uint32(data, &v)) + return; + + if (Nflag) + printf("(0x%08x)", v); + + printf("\n"); + if (v & (1<< 0)) printf(" GetCapabilities\n"); + if (v & (1<< 1)) printf(" PutImage\n"); + if (v & (1<< 2)) printf(" PutLinkedAttachment\n"); + if (v & (1<< 3)) printf(" PutLinkedThumbnail\n"); + if (v & (1<< 4)) printf(" RemoteDisplay\n"); + if (v & (1<< 5)) printf(" GetImagesList\n"); + if (v & (1<< 6)) printf(" GetImageProperties\n"); + if (v & (1<< 7)) printf(" GetImage\n"); + if (v & (1<< 8)) printf(" GetLinkedThumbnail\n"); + if (v & (1<< 9)) printf(" GetLinkedAttachment\n"); + if (v & (1<<10)) printf(" DeleteImage\n"); + if (v & (1<<11)) printf(" StartPrint\n"); + if (v & (1<<12)) printf(" GetPartialImage\n"); + if (v & (1<<13)) printf(" StartArchive\n"); + if (v & (1<<14)) printf(" GetMonitoringImage\n"); + if (v & (1<<16)) printf(" GetStatus\n"); +} + +static void +print_bip_capacity(sdp_data_t *data) +{ + char buf[9]; + uint64_t v; + + if (!sdp_get_uint64(data, &v)) + return; + + if (v > INT64_MAX) { + printf("more than "); + v = INT64_MAX; + } + + (void)humanize_number(buf, sizeof(buf), (int64_t)v, + "bytes", HN_AUTOSCALE, HN_NOSPACE); + + printf("%s\n", buf); +} + +static void print_rfcomm(sdp_data_t *data) { uint8_t v;