xref: /aosp_15_r20/external/libcups/cups/tlscheck.c (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker  * TLS check program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker  *
4*5e7646d2SAndroid Build Coastguard Worker  * Copyright 2007-2017 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker  * Copyright 1997-2006 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker  *
7*5e7646d2SAndroid Build Coastguard Worker  * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker  */
9*5e7646d2SAndroid Build Coastguard Worker 
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker  * Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker  */
13*5e7646d2SAndroid Build Coastguard Worker 
14*5e7646d2SAndroid Build Coastguard Worker #include "cups-private.h"
15*5e7646d2SAndroid Build Coastguard Worker 
16*5e7646d2SAndroid Build Coastguard Worker 
17*5e7646d2SAndroid Build Coastguard Worker #ifndef HAVE_SSL
main(void)18*5e7646d2SAndroid Build Coastguard Worker int main(void) { puts("Sorry, no TLS support compiled in."); return (1); }
19*5e7646d2SAndroid Build Coastguard Worker #else
20*5e7646d2SAndroid Build Coastguard Worker 
21*5e7646d2SAndroid Build Coastguard Worker /*
22*5e7646d2SAndroid Build Coastguard Worker  * Local functions...
23*5e7646d2SAndroid Build Coastguard Worker  */
24*5e7646d2SAndroid Build Coastguard Worker 
25*5e7646d2SAndroid Build Coastguard Worker static void	usage(void) _CUPS_NORETURN;
26*5e7646d2SAndroid Build Coastguard Worker 
27*5e7646d2SAndroid Build Coastguard Worker 
28*5e7646d2SAndroid Build Coastguard Worker /*
29*5e7646d2SAndroid Build Coastguard Worker  * 'main()' - Main entry.
30*5e7646d2SAndroid Build Coastguard Worker  */
31*5e7646d2SAndroid Build Coastguard Worker 
32*5e7646d2SAndroid Build Coastguard Worker int					/* O - Exit status */
main(int argc,char * argv[])33*5e7646d2SAndroid Build Coastguard Worker main(int  argc,				/* I - Number of command-line arguments */
34*5e7646d2SAndroid Build Coastguard Worker      char *argv[])			/* I - Command-line arguments */
35*5e7646d2SAndroid Build Coastguard Worker {
36*5e7646d2SAndroid Build Coastguard Worker   int		i;			/* Looping var */
37*5e7646d2SAndroid Build Coastguard Worker   http_t	*http;			/* HTTP connection */
38*5e7646d2SAndroid Build Coastguard Worker   const char	*server = NULL;		/* Hostname from command-line */
39*5e7646d2SAndroid Build Coastguard Worker   int		port = 0;		/* Port number */
40*5e7646d2SAndroid Build Coastguard Worker   cups_array_t	*creds;			/* Server credentials */
41*5e7646d2SAndroid Build Coastguard Worker   char		creds_str[2048];	/* Credentials string */
42*5e7646d2SAndroid Build Coastguard Worker   const char	*cipherName = "UNKNOWN";/* Cipher suite name */
43*5e7646d2SAndroid Build Coastguard Worker   int		dhBits = 0;		/* Diffie-Hellman bits */
44*5e7646d2SAndroid Build Coastguard Worker   int		tlsVersion = 0;		/* TLS version number */
45*5e7646d2SAndroid Build Coastguard Worker   char		uri[1024],		/* Printer URI */
46*5e7646d2SAndroid Build Coastguard Worker 		scheme[32],		/* URI scheme */
47*5e7646d2SAndroid Build Coastguard Worker 		host[256],		/* Hostname */
48*5e7646d2SAndroid Build Coastguard Worker 		userpass[256],		/* Username/password */
49*5e7646d2SAndroid Build Coastguard Worker 		resource[256];		/* Resource path */
50*5e7646d2SAndroid Build Coastguard Worker   int		af = AF_UNSPEC,		/* Address family */
51*5e7646d2SAndroid Build Coastguard Worker 		tls_options = _HTTP_TLS_NONE,
52*5e7646d2SAndroid Build Coastguard Worker 					/* TLS options */
53*5e7646d2SAndroid Build Coastguard Worker 		tls_min_version = _HTTP_TLS_1_0,
54*5e7646d2SAndroid Build Coastguard Worker 		tls_max_version = _HTTP_TLS_MAX,
55*5e7646d2SAndroid Build Coastguard Worker 		verbose = 0;		/* Verbosity */
56*5e7646d2SAndroid Build Coastguard Worker   ipp_t		*request,		/* IPP Get-Printer-Attributes request */
57*5e7646d2SAndroid Build Coastguard Worker 		*response;		/* IPP Get-Printer-Attributes response */
58*5e7646d2SAndroid Build Coastguard Worker   ipp_attribute_t *attr;		/* Current attribute */
59*5e7646d2SAndroid Build Coastguard Worker   const char	*name;			/* Attribute name */
60*5e7646d2SAndroid Build Coastguard Worker   char		value[1024];		/* Attribute (string) value */
61*5e7646d2SAndroid Build Coastguard Worker   static const char * const pattrs[] =	/* Requested attributes */
62*5e7646d2SAndroid Build Coastguard Worker   {
63*5e7646d2SAndroid Build Coastguard Worker     "color-supported",
64*5e7646d2SAndroid Build Coastguard Worker     "compression-supported",
65*5e7646d2SAndroid Build Coastguard Worker     "document-format-supported",
66*5e7646d2SAndroid Build Coastguard Worker     "pages-per-minute",
67*5e7646d2SAndroid Build Coastguard Worker     "printer-location",
68*5e7646d2SAndroid Build Coastguard Worker     "printer-make-and-model",
69*5e7646d2SAndroid Build Coastguard Worker     "printer-state",
70*5e7646d2SAndroid Build Coastguard Worker     "printer-state-reasons",
71*5e7646d2SAndroid Build Coastguard Worker     "sides-supported",
72*5e7646d2SAndroid Build Coastguard Worker     "uri-authentication-supported",
73*5e7646d2SAndroid Build Coastguard Worker     "uri-security-supported"
74*5e7646d2SAndroid Build Coastguard Worker   };
75*5e7646d2SAndroid Build Coastguard Worker 
76*5e7646d2SAndroid Build Coastguard Worker 
77*5e7646d2SAndroid Build Coastguard Worker   for (i = 1; i < argc; i ++)
78*5e7646d2SAndroid Build Coastguard Worker   {
79*5e7646d2SAndroid Build Coastguard Worker     if (!strcmp(argv[i], "--dh"))
80*5e7646d2SAndroid Build Coastguard Worker     {
81*5e7646d2SAndroid Build Coastguard Worker       tls_options |= _HTTP_TLS_ALLOW_DH;
82*5e7646d2SAndroid Build Coastguard Worker     }
83*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--no-cbc"))
84*5e7646d2SAndroid Build Coastguard Worker     {
85*5e7646d2SAndroid Build Coastguard Worker       tls_options |= _HTTP_TLS_DENY_CBC;
86*5e7646d2SAndroid Build Coastguard Worker     }
87*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--no-tls10"))
88*5e7646d2SAndroid Build Coastguard Worker     {
89*5e7646d2SAndroid Build Coastguard Worker       tls_min_version = _HTTP_TLS_1_1;
90*5e7646d2SAndroid Build Coastguard Worker     }
91*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--tls10"))
92*5e7646d2SAndroid Build Coastguard Worker     {
93*5e7646d2SAndroid Build Coastguard Worker       tls_min_version = _HTTP_TLS_1_0;
94*5e7646d2SAndroid Build Coastguard Worker       tls_max_version = _HTTP_TLS_1_0;
95*5e7646d2SAndroid Build Coastguard Worker     }
96*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--tls11"))
97*5e7646d2SAndroid Build Coastguard Worker     {
98*5e7646d2SAndroid Build Coastguard Worker       tls_min_version = _HTTP_TLS_1_1;
99*5e7646d2SAndroid Build Coastguard Worker       tls_max_version = _HTTP_TLS_1_1;
100*5e7646d2SAndroid Build Coastguard Worker     }
101*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--tls12"))
102*5e7646d2SAndroid Build Coastguard Worker     {
103*5e7646d2SAndroid Build Coastguard Worker       tls_min_version = _HTTP_TLS_1_2;
104*5e7646d2SAndroid Build Coastguard Worker       tls_max_version = _HTTP_TLS_1_2;
105*5e7646d2SAndroid Build Coastguard Worker     }
106*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--tls13"))
107*5e7646d2SAndroid Build Coastguard Worker     {
108*5e7646d2SAndroid Build Coastguard Worker       tls_min_version = _HTTP_TLS_1_3;
109*5e7646d2SAndroid Build Coastguard Worker       tls_max_version = _HTTP_TLS_1_3;
110*5e7646d2SAndroid Build Coastguard Worker     }
111*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--rc4"))
112*5e7646d2SAndroid Build Coastguard Worker     {
113*5e7646d2SAndroid Build Coastguard Worker       tls_options |= _HTTP_TLS_ALLOW_RC4;
114*5e7646d2SAndroid Build Coastguard Worker     }
115*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "--verbose") || !strcmp(argv[i], "-v"))
116*5e7646d2SAndroid Build Coastguard Worker     {
117*5e7646d2SAndroid Build Coastguard Worker       verbose = 1;
118*5e7646d2SAndroid Build Coastguard Worker     }
119*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "-4"))
120*5e7646d2SAndroid Build Coastguard Worker     {
121*5e7646d2SAndroid Build Coastguard Worker       af = AF_INET;
122*5e7646d2SAndroid Build Coastguard Worker     }
123*5e7646d2SAndroid Build Coastguard Worker     else if (!strcmp(argv[i], "-6"))
124*5e7646d2SAndroid Build Coastguard Worker     {
125*5e7646d2SAndroid Build Coastguard Worker       af = AF_INET6;
126*5e7646d2SAndroid Build Coastguard Worker     }
127*5e7646d2SAndroid Build Coastguard Worker     else if (argv[i][0] == '-')
128*5e7646d2SAndroid Build Coastguard Worker     {
129*5e7646d2SAndroid Build Coastguard Worker       printf("tlscheck: Unknown option '%s'.\n", argv[i]);
130*5e7646d2SAndroid Build Coastguard Worker       usage();
131*5e7646d2SAndroid Build Coastguard Worker     }
132*5e7646d2SAndroid Build Coastguard Worker     else if (!server)
133*5e7646d2SAndroid Build Coastguard Worker     {
134*5e7646d2SAndroid Build Coastguard Worker       if (!strncmp(argv[i], "ipps://", 7))
135*5e7646d2SAndroid Build Coastguard Worker       {
136*5e7646d2SAndroid Build Coastguard Worker         httpSeparateURI(HTTP_URI_CODING_ALL, argv[i], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource));
137*5e7646d2SAndroid Build Coastguard Worker         server = host;
138*5e7646d2SAndroid Build Coastguard Worker       }
139*5e7646d2SAndroid Build Coastguard Worker       else
140*5e7646d2SAndroid Build Coastguard Worker       {
141*5e7646d2SAndroid Build Coastguard Worker         server = argv[i];
142*5e7646d2SAndroid Build Coastguard Worker         strlcpy(resource, "/ipp/print", sizeof(resource));
143*5e7646d2SAndroid Build Coastguard Worker       }
144*5e7646d2SAndroid Build Coastguard Worker     }
145*5e7646d2SAndroid Build Coastguard Worker     else if (!port && (argv[i][0] == '=' || isdigit(argv[i][0] & 255)))
146*5e7646d2SAndroid Build Coastguard Worker     {
147*5e7646d2SAndroid Build Coastguard Worker       if (argv[i][0] == '=')
148*5e7646d2SAndroid Build Coastguard Worker 	port = atoi(argv[i] + 1);
149*5e7646d2SAndroid Build Coastguard Worker       else
150*5e7646d2SAndroid Build Coastguard Worker 	port = atoi(argv[i]);
151*5e7646d2SAndroid Build Coastguard Worker     }
152*5e7646d2SAndroid Build Coastguard Worker     else
153*5e7646d2SAndroid Build Coastguard Worker     {
154*5e7646d2SAndroid Build Coastguard Worker       printf("tlscheck: Unexpected argument '%s'.\n", argv[i]);
155*5e7646d2SAndroid Build Coastguard Worker       usage();
156*5e7646d2SAndroid Build Coastguard Worker     }
157*5e7646d2SAndroid Build Coastguard Worker   }
158*5e7646d2SAndroid Build Coastguard Worker 
159*5e7646d2SAndroid Build Coastguard Worker   if (!server)
160*5e7646d2SAndroid Build Coastguard Worker     usage();
161*5e7646d2SAndroid Build Coastguard Worker 
162*5e7646d2SAndroid Build Coastguard Worker   if (!port)
163*5e7646d2SAndroid Build Coastguard Worker     port = 631;
164*5e7646d2SAndroid Build Coastguard Worker 
165*5e7646d2SAndroid Build Coastguard Worker   _httpTLSSetOptions(tls_options, tls_min_version, tls_max_version);
166*5e7646d2SAndroid Build Coastguard Worker 
167*5e7646d2SAndroid Build Coastguard Worker   http = httpConnect2(server, port, NULL, af, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL);
168*5e7646d2SAndroid Build Coastguard Worker   if (!http)
169*5e7646d2SAndroid Build Coastguard Worker   {
170*5e7646d2SAndroid Build Coastguard Worker     printf("%s: ERROR (%s)\n", server, cupsLastErrorString());
171*5e7646d2SAndroid Build Coastguard Worker     return (1);
172*5e7646d2SAndroid Build Coastguard Worker   }
173*5e7646d2SAndroid Build Coastguard Worker 
174*5e7646d2SAndroid Build Coastguard Worker   if (httpCopyCredentials(http, &creds))
175*5e7646d2SAndroid Build Coastguard Worker   {
176*5e7646d2SAndroid Build Coastguard Worker     strlcpy(creds_str, "Unable to get server X.509 credentials.", sizeof(creds_str));
177*5e7646d2SAndroid Build Coastguard Worker   }
178*5e7646d2SAndroid Build Coastguard Worker   else
179*5e7646d2SAndroid Build Coastguard Worker   {
180*5e7646d2SAndroid Build Coastguard Worker     httpCredentialsString(creds, creds_str, sizeof(creds_str));
181*5e7646d2SAndroid Build Coastguard Worker     httpFreeCredentials(creds);
182*5e7646d2SAndroid Build Coastguard Worker   }
183*5e7646d2SAndroid Build Coastguard Worker 
184*5e7646d2SAndroid Build Coastguard Worker #ifdef __APPLE__
185*5e7646d2SAndroid Build Coastguard Worker   SSLProtocol protocol;
186*5e7646d2SAndroid Build Coastguard Worker   SSLCipherSuite cipher;
187*5e7646d2SAndroid Build Coastguard Worker   char unknownCipherName[256];
188*5e7646d2SAndroid Build Coastguard Worker   int paramsNeeded = 0;
189*5e7646d2SAndroid Build Coastguard Worker   const void *params;
190*5e7646d2SAndroid Build Coastguard Worker   size_t paramsLen;
191*5e7646d2SAndroid Build Coastguard Worker   OSStatus err;
192*5e7646d2SAndroid Build Coastguard Worker 
193*5e7646d2SAndroid Build Coastguard Worker   if ((err = SSLGetNegotiatedProtocolVersion(http->tls, &protocol)) != noErr)
194*5e7646d2SAndroid Build Coastguard Worker   {
195*5e7646d2SAndroid Build Coastguard Worker     printf("%s: ERROR (No protocol version - %d)\n", server, (int)err);
196*5e7646d2SAndroid Build Coastguard Worker     httpClose(http);
197*5e7646d2SAndroid Build Coastguard Worker     return (1);
198*5e7646d2SAndroid Build Coastguard Worker   }
199*5e7646d2SAndroid Build Coastguard Worker 
200*5e7646d2SAndroid Build Coastguard Worker   switch (protocol)
201*5e7646d2SAndroid Build Coastguard Worker   {
202*5e7646d2SAndroid Build Coastguard Worker     default :
203*5e7646d2SAndroid Build Coastguard Worker         tlsVersion = 0;
204*5e7646d2SAndroid Build Coastguard Worker         break;
205*5e7646d2SAndroid Build Coastguard Worker     case kSSLProtocol3 :
206*5e7646d2SAndroid Build Coastguard Worker         tlsVersion = 30;
207*5e7646d2SAndroid Build Coastguard Worker         break;
208*5e7646d2SAndroid Build Coastguard Worker     case kTLSProtocol1 :
209*5e7646d2SAndroid Build Coastguard Worker         tlsVersion = 10;
210*5e7646d2SAndroid Build Coastguard Worker         break;
211*5e7646d2SAndroid Build Coastguard Worker     case kTLSProtocol11 :
212*5e7646d2SAndroid Build Coastguard Worker         tlsVersion = 11;
213*5e7646d2SAndroid Build Coastguard Worker         break;
214*5e7646d2SAndroid Build Coastguard Worker     case kTLSProtocol12 :
215*5e7646d2SAndroid Build Coastguard Worker         tlsVersion = 12;
216*5e7646d2SAndroid Build Coastguard Worker         break;
217*5e7646d2SAndroid Build Coastguard Worker   }
218*5e7646d2SAndroid Build Coastguard Worker 
219*5e7646d2SAndroid Build Coastguard Worker   if ((err = SSLGetNegotiatedCipher(http->tls, &cipher)) != noErr)
220*5e7646d2SAndroid Build Coastguard Worker   {
221*5e7646d2SAndroid Build Coastguard Worker     printf("%s: ERROR (No cipher suite - %d)\n", server, (int)err);
222*5e7646d2SAndroid Build Coastguard Worker     httpClose(http);
223*5e7646d2SAndroid Build Coastguard Worker     return (1);
224*5e7646d2SAndroid Build Coastguard Worker   }
225*5e7646d2SAndroid Build Coastguard Worker 
226*5e7646d2SAndroid Build Coastguard Worker   switch (cipher)
227*5e7646d2SAndroid Build Coastguard Worker   {
228*5e7646d2SAndroid Build Coastguard Worker     case TLS_NULL_WITH_NULL_NULL:
229*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_NULL_WITH_NULL_NULL";
230*5e7646d2SAndroid Build Coastguard Worker 	break;
231*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_NULL_MD5:
232*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_NULL_MD5";
233*5e7646d2SAndroid Build Coastguard Worker 	break;
234*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_NULL_SHA:
235*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_NULL_SHA";
236*5e7646d2SAndroid Build Coastguard Worker 	break;
237*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_RC4_128_MD5:
238*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_RC4_128_MD5";
239*5e7646d2SAndroid Build Coastguard Worker 	break;
240*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_RC4_128_SHA:
241*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_RC4_128_SHA";
242*5e7646d2SAndroid Build Coastguard Worker 	break;
243*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
244*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_3DES_EDE_CBC_SHA";
245*5e7646d2SAndroid Build Coastguard Worker 	break;
246*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_NULL_SHA256:
247*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_NULL_SHA256";
248*5e7646d2SAndroid Build Coastguard Worker 	break;
249*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_AES_128_CBC_SHA256:
250*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA256";
251*5e7646d2SAndroid Build Coastguard Worker 	break;
252*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_AES_256_CBC_SHA256:
253*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA256";
254*5e7646d2SAndroid Build Coastguard Worker 	break;
255*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA:
256*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA";
257*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
258*5e7646d2SAndroid Build Coastguard Worker 	break;
259*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA:
260*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA";
261*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
262*5e7646d2SAndroid Build Coastguard Worker 	break;
263*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
264*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
265*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
266*5e7646d2SAndroid Build Coastguard Worker 	break;
267*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
268*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
269*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
270*5e7646d2SAndroid Build Coastguard Worker 	break;
271*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_DSS_WITH_AES_128_CBC_SHA256:
272*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA256";
273*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
274*5e7646d2SAndroid Build Coastguard Worker 	break;
275*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_RSA_WITH_AES_128_CBC_SHA256:
276*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA256";
277*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
278*5e7646d2SAndroid Build Coastguard Worker 	break;
279*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256:
280*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256";
281*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
282*5e7646d2SAndroid Build Coastguard Worker 	break;
283*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
284*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256";
285*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
286*5e7646d2SAndroid Build Coastguard Worker 	break;
287*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_DSS_WITH_AES_256_CBC_SHA256:
288*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA256";
289*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
290*5e7646d2SAndroid Build Coastguard Worker 	break;
291*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_RSA_WITH_AES_256_CBC_SHA256:
292*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA256";
293*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
294*5e7646d2SAndroid Build Coastguard Worker 	break;
295*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256:
296*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256";
297*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
298*5e7646d2SAndroid Build Coastguard Worker 	break;
299*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
300*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256";
301*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
302*5e7646d2SAndroid Build Coastguard Worker 	break;
303*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_RC4_128_MD5:
304*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_RC4_128_MD5";
305*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
306*5e7646d2SAndroid Build Coastguard Worker 	break;
307*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_3DES_EDE_CBC_SHA:
308*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA";
309*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
310*5e7646d2SAndroid Build Coastguard Worker 	break;
311*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
312*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA256";
313*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
314*5e7646d2SAndroid Build Coastguard Worker 	break;
315*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_AES_256_CBC_SHA256:
316*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA256";
317*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
318*5e7646d2SAndroid Build Coastguard Worker 	break;
319*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_RC4_128_SHA:
320*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_RC4_128_SHA";
321*5e7646d2SAndroid Build Coastguard Worker 	break;
322*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_3DES_EDE_CBC_SHA:
323*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_3DES_EDE_CBC_SHA";
324*5e7646d2SAndroid Build Coastguard Worker 	break;
325*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_AES_128_CBC_SHA:
326*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA";
327*5e7646d2SAndroid Build Coastguard Worker 	break;
328*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_AES_256_CBC_SHA:
329*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA";
330*5e7646d2SAndroid Build Coastguard Worker 	break;
331*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_RC4_128_SHA:
332*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_RC4_128_SHA";
333*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
334*5e7646d2SAndroid Build Coastguard Worker 	break;
335*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA:
336*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA";
337*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
338*5e7646d2SAndroid Build Coastguard Worker 	break;
339*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_AES_128_CBC_SHA:
340*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA";
341*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
342*5e7646d2SAndroid Build Coastguard Worker 	break;
343*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_AES_256_CBC_SHA:
344*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA";
345*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
346*5e7646d2SAndroid Build Coastguard Worker 	break;
347*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_RC4_128_SHA:
348*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_RC4_128_SHA";
349*5e7646d2SAndroid Build Coastguard Worker 	break;
350*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA:
351*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA";
352*5e7646d2SAndroid Build Coastguard Worker 	break;
353*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_AES_128_CBC_SHA:
354*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA";
355*5e7646d2SAndroid Build Coastguard Worker 	break;
356*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_AES_256_CBC_SHA:
357*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA";
358*5e7646d2SAndroid Build Coastguard Worker 	break;
359*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_NULL_SHA:
360*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_NULL_SHA";
361*5e7646d2SAndroid Build Coastguard Worker 	break;
362*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_NULL_SHA:
363*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_NULL_SHA";
364*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
365*5e7646d2SAndroid Build Coastguard Worker 	break;
366*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_NULL_SHA:
367*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_NULL_SHA";
368*5e7646d2SAndroid Build Coastguard Worker 	break;
369*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_AES_128_GCM_SHA256:
370*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_AES_128_GCM_SHA256";
371*5e7646d2SAndroid Build Coastguard Worker 	break;
372*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_AES_256_GCM_SHA384:
373*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_AES_256_GCM_SHA384";
374*5e7646d2SAndroid Build Coastguard Worker 	break;
375*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
376*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
377*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
378*5e7646d2SAndroid Build Coastguard Worker 	break;
379*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
380*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384";
381*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
382*5e7646d2SAndroid Build Coastguard Worker 	break;
383*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_RSA_WITH_AES_128_GCM_SHA256:
384*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_RSA_WITH_AES_128_GCM_SHA256";
385*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
386*5e7646d2SAndroid Build Coastguard Worker 	break;
387*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_RSA_WITH_AES_256_GCM_SHA384:
388*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_RSA_WITH_AES_256_GCM_SHA384";
389*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
390*5e7646d2SAndroid Build Coastguard Worker 	break;
391*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256:
392*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256";
393*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
394*5e7646d2SAndroid Build Coastguard Worker 	break;
395*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384:
396*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384";
397*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
398*5e7646d2SAndroid Build Coastguard Worker 	break;
399*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_DSS_WITH_AES_128_GCM_SHA256:
400*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_DSS_WITH_AES_128_GCM_SHA256";
401*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
402*5e7646d2SAndroid Build Coastguard Worker 	break;
403*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_DSS_WITH_AES_256_GCM_SHA384:
404*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_DSS_WITH_AES_256_GCM_SHA384";
405*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
406*5e7646d2SAndroid Build Coastguard Worker 	break;
407*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_AES_128_GCM_SHA256:
408*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_AES_128_GCM_SHA256";
409*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
410*5e7646d2SAndroid Build Coastguard Worker 	break;
411*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_AES_256_GCM_SHA384:
412*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_AES_256_GCM_SHA384";
413*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
414*5e7646d2SAndroid Build Coastguard Worker 	break;
415*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_AES_128_GCM_SHA256:
416*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_AES_128_GCM_SHA256";
417*5e7646d2SAndroid Build Coastguard Worker 	break;
418*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_AES_256_GCM_SHA384:
419*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_AES_256_GCM_SHA384";
420*5e7646d2SAndroid Build Coastguard Worker 	break;
421*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256:
422*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256";
423*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
424*5e7646d2SAndroid Build Coastguard Worker 	break;
425*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384:
426*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384";
427*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
428*5e7646d2SAndroid Build Coastguard Worker 	break;
429*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_AES_128_GCM_SHA256:
430*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256";
431*5e7646d2SAndroid Build Coastguard Worker 	break;
432*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_AES_256_GCM_SHA384:
433*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384";
434*5e7646d2SAndroid Build Coastguard Worker 	break;
435*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_AES_128_CBC_SHA256:
436*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA256";
437*5e7646d2SAndroid Build Coastguard Worker 	break;
438*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_AES_256_CBC_SHA384:
439*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA384";
440*5e7646d2SAndroid Build Coastguard Worker 	break;
441*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_NULL_SHA256:
442*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_NULL_SHA256";
443*5e7646d2SAndroid Build Coastguard Worker 	break;
444*5e7646d2SAndroid Build Coastguard Worker     case TLS_PSK_WITH_NULL_SHA384:
445*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_PSK_WITH_NULL_SHA384";
446*5e7646d2SAndroid Build Coastguard Worker 	break;
447*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256:
448*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256";
449*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
450*5e7646d2SAndroid Build Coastguard Worker 	break;
451*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384:
452*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384";
453*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
454*5e7646d2SAndroid Build Coastguard Worker 	break;
455*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_NULL_SHA256:
456*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_NULL_SHA256";
457*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
458*5e7646d2SAndroid Build Coastguard Worker 	break;
459*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_PSK_WITH_NULL_SHA384:
460*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_PSK_WITH_NULL_SHA384";
461*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
462*5e7646d2SAndroid Build Coastguard Worker 	break;
463*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_AES_128_CBC_SHA256:
464*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256";
465*5e7646d2SAndroid Build Coastguard Worker 	break;
466*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_AES_256_CBC_SHA384:
467*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384";
468*5e7646d2SAndroid Build Coastguard Worker 	break;
469*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_NULL_SHA256:
470*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_NULL_SHA256";
471*5e7646d2SAndroid Build Coastguard Worker 	break;
472*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_PSK_WITH_NULL_SHA384:
473*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_PSK_WITH_NULL_SHA384";
474*5e7646d2SAndroid Build Coastguard Worker 	break;
475*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:
476*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
477*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
478*5e7646d2SAndroid Build Coastguard Worker 	break;
479*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384:
480*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
481*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
482*5e7646d2SAndroid Build Coastguard Worker 	break;
483*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256:
484*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256";
485*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
486*5e7646d2SAndroid Build Coastguard Worker 	break;
487*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384:
488*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384";
489*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
490*5e7646d2SAndroid Build Coastguard Worker 	break;
491*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:
492*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
493*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
494*5e7646d2SAndroid Build Coastguard Worker 	break;
495*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:
496*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
497*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
498*5e7646d2SAndroid Build Coastguard Worker 	break;
499*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256:
500*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256";
501*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
502*5e7646d2SAndroid Build Coastguard Worker 	break;
503*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384:
504*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384";
505*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
506*5e7646d2SAndroid Build Coastguard Worker 	break;
507*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
508*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
509*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
510*5e7646d2SAndroid Build Coastguard Worker 	break;
511*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:
512*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
513*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
514*5e7646d2SAndroid Build Coastguard Worker 	break;
515*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256:
516*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256";
517*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
518*5e7646d2SAndroid Build Coastguard Worker 	break;
519*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384:
520*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384";
521*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
522*5e7646d2SAndroid Build Coastguard Worker 	break;
523*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
524*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
525*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
526*5e7646d2SAndroid Build Coastguard Worker 	break;
527*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:
528*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384";
529*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
530*5e7646d2SAndroid Build Coastguard Worker 	break;
531*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256:
532*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256";
533*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
534*5e7646d2SAndroid Build Coastguard Worker 	break;
535*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384:
536*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384";
537*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
538*5e7646d2SAndroid Build Coastguard Worker 	break;
539*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_AES_128_CBC_SHA:
540*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA";
541*5e7646d2SAndroid Build Coastguard Worker 	break;
542*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_DSS_WITH_AES_128_CBC_SHA:
543*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA";
544*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
545*5e7646d2SAndroid Build Coastguard Worker 	break;
546*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_RSA_WITH_AES_128_CBC_SHA:
547*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA";
548*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
549*5e7646d2SAndroid Build Coastguard Worker 	break;
550*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_DSS_WITH_AES_128_CBC_SHA:
551*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
552*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
553*5e7646d2SAndroid Build Coastguard Worker 	break;
554*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
555*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
556*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
557*5e7646d2SAndroid Build Coastguard Worker 	break;
558*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_AES_128_CBC_SHA:
559*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA";
560*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
561*5e7646d2SAndroid Build Coastguard Worker 	break;
562*5e7646d2SAndroid Build Coastguard Worker     case TLS_RSA_WITH_AES_256_CBC_SHA:
563*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA";
564*5e7646d2SAndroid Build Coastguard Worker 	break;
565*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_DSS_WITH_AES_256_CBC_SHA:
566*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA";
567*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
568*5e7646d2SAndroid Build Coastguard Worker 	break;
569*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_RSA_WITH_AES_256_CBC_SHA:
570*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA";
571*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
572*5e7646d2SAndroid Build Coastguard Worker 	break;
573*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_DSS_WITH_AES_256_CBC_SHA:
574*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
575*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
576*5e7646d2SAndroid Build Coastguard Worker 	break;
577*5e7646d2SAndroid Build Coastguard Worker     case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
578*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
579*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
580*5e7646d2SAndroid Build Coastguard Worker 	break;
581*5e7646d2SAndroid Build Coastguard Worker     case TLS_DH_anon_WITH_AES_256_CBC_SHA:
582*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA";
583*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
584*5e7646d2SAndroid Build Coastguard Worker 	break;
585*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_NULL_SHA:
586*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_NULL_SHA";
587*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
588*5e7646d2SAndroid Build Coastguard Worker 	break;
589*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_RC4_128_SHA:
590*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_RC4_128_SHA";
591*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
592*5e7646d2SAndroid Build Coastguard Worker 	break;
593*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA:
594*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA";
595*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
596*5e7646d2SAndroid Build Coastguard Worker 	break;
597*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA:
598*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA";
599*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
600*5e7646d2SAndroid Build Coastguard Worker 	break;
601*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA:
602*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA";
603*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
604*5e7646d2SAndroid Build Coastguard Worker 	break;
605*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_NULL_SHA:
606*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_NULL_SHA";
607*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
608*5e7646d2SAndroid Build Coastguard Worker 	break;
609*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:
610*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA";
611*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
612*5e7646d2SAndroid Build Coastguard Worker 	break;
613*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA:
614*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA";
615*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
616*5e7646d2SAndroid Build Coastguard Worker 	break;
617*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:
618*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
619*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
620*5e7646d2SAndroid Build Coastguard Worker 	break;
621*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:
622*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
623*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
624*5e7646d2SAndroid Build Coastguard Worker 	break;
625*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_NULL_SHA:
626*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_NULL_SHA";
627*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
628*5e7646d2SAndroid Build Coastguard Worker 	break;
629*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_RC4_128_SHA:
630*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_RC4_128_SHA";
631*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
632*5e7646d2SAndroid Build Coastguard Worker 	break;
633*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA:
634*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA";
635*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
636*5e7646d2SAndroid Build Coastguard Worker 	break;
637*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA:
638*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA";
639*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
640*5e7646d2SAndroid Build Coastguard Worker 	break;
641*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA:
642*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA";
643*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
644*5e7646d2SAndroid Build Coastguard Worker 	break;
645*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_NULL_SHA:
646*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_NULL_SHA";
647*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
648*5e7646d2SAndroid Build Coastguard Worker 	break;
649*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_RC4_128_SHA:
650*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_RC4_128_SHA";
651*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
652*5e7646d2SAndroid Build Coastguard Worker 	break;
653*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:
654*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA";
655*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
656*5e7646d2SAndroid Build Coastguard Worker 	break;
657*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:
658*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA";
659*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
660*5e7646d2SAndroid Build Coastguard Worker 	break;
661*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
662*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
663*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
664*5e7646d2SAndroid Build Coastguard Worker 	break;
665*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_anon_WITH_NULL_SHA:
666*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_anon_WITH_NULL_SHA";
667*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
668*5e7646d2SAndroid Build Coastguard Worker 	break;
669*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_anon_WITH_RC4_128_SHA:
670*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_anon_WITH_RC4_128_SHA";
671*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
672*5e7646d2SAndroid Build Coastguard Worker 	break;
673*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA:
674*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA";
675*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
676*5e7646d2SAndroid Build Coastguard Worker 	break;
677*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_anon_WITH_AES_128_CBC_SHA:
678*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_anon_WITH_AES_128_CBC_SHA";
679*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
680*5e7646d2SAndroid Build Coastguard Worker 	break;
681*5e7646d2SAndroid Build Coastguard Worker     case TLS_ECDH_anon_WITH_AES_256_CBC_SHA:
682*5e7646d2SAndroid Build Coastguard Worker 	cipherName = "TLS_ECDH_anon_WITH_AES_256_CBC_SHA";
683*5e7646d2SAndroid Build Coastguard Worker 	paramsNeeded = 1;
684*5e7646d2SAndroid Build Coastguard Worker 	break;
685*5e7646d2SAndroid Build Coastguard Worker     default :
686*5e7646d2SAndroid Build Coastguard Worker         snprintf(unknownCipherName, sizeof(unknownCipherName), "UNKNOWN_%04X", cipher);
687*5e7646d2SAndroid Build Coastguard Worker         cipherName = unknownCipherName;
688*5e7646d2SAndroid Build Coastguard Worker         break;
689*5e7646d2SAndroid Build Coastguard Worker   }
690*5e7646d2SAndroid Build Coastguard Worker 
691*5e7646d2SAndroid Build Coastguard Worker   if (cipher == TLS_RSA_WITH_RC4_128_MD5 ||
692*5e7646d2SAndroid Build Coastguard Worker       cipher == TLS_RSA_WITH_RC4_128_SHA)
693*5e7646d2SAndroid Build Coastguard Worker   {
694*5e7646d2SAndroid Build Coastguard Worker     printf("%s: ERROR (Printers MUST NOT negotiate RC4 cipher suites.)\n", server);
695*5e7646d2SAndroid Build Coastguard Worker     httpClose(http);
696*5e7646d2SAndroid Build Coastguard Worker     return (1);
697*5e7646d2SAndroid Build Coastguard Worker   }
698*5e7646d2SAndroid Build Coastguard Worker 
699*5e7646d2SAndroid Build Coastguard Worker   if ((err = SSLGetDiffieHellmanParams(http->tls, &params, &paramsLen)) != noErr && paramsNeeded)
700*5e7646d2SAndroid Build Coastguard Worker   {
701*5e7646d2SAndroid Build Coastguard Worker     printf("%s: ERROR (Unable to get Diffie-Hellman parameters - %d)\n", server, (int)err);
702*5e7646d2SAndroid Build Coastguard Worker     httpClose(http);
703*5e7646d2SAndroid Build Coastguard Worker     return (1);
704*5e7646d2SAndroid Build Coastguard Worker   }
705*5e7646d2SAndroid Build Coastguard Worker 
706*5e7646d2SAndroid Build Coastguard Worker   if (paramsLen < 128 && paramsLen != 0)
707*5e7646d2SAndroid Build Coastguard Worker   {
708*5e7646d2SAndroid Build Coastguard Worker     printf("%s: ERROR (Diffie-Hellman parameters MUST be at least 2048 bits, but Printer uses only %d bits/%d bytes)\n", server, (int)paramsLen * 8, (int)paramsLen);
709*5e7646d2SAndroid Build Coastguard Worker     httpClose(http);
710*5e7646d2SAndroid Build Coastguard Worker     return (1);
711*5e7646d2SAndroid Build Coastguard Worker   }
712*5e7646d2SAndroid Build Coastguard Worker 
713*5e7646d2SAndroid Build Coastguard Worker   dhBits = (int)paramsLen * 8;
714*5e7646d2SAndroid Build Coastguard Worker #endif /* __APPLE__ */
715*5e7646d2SAndroid Build Coastguard Worker 
716*5e7646d2SAndroid Build Coastguard Worker   if (dhBits > 0)
717*5e7646d2SAndroid Build Coastguard Worker     printf("%s: OK (TLS: %d.%d, %s, %d DH bits)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName, dhBits);
718*5e7646d2SAndroid Build Coastguard Worker   else
719*5e7646d2SAndroid Build Coastguard Worker     printf("%s: OK (TLS: %d.%d, %s)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName);
720*5e7646d2SAndroid Build Coastguard Worker 
721*5e7646d2SAndroid Build Coastguard Worker   printf("    %s\n", creds_str);
722*5e7646d2SAndroid Build Coastguard Worker 
723*5e7646d2SAndroid Build Coastguard Worker   if (verbose)
724*5e7646d2SAndroid Build Coastguard Worker   {
725*5e7646d2SAndroid Build Coastguard Worker     httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipps", NULL, host, port, resource);
726*5e7646d2SAndroid Build Coastguard Worker     request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
727*5e7646d2SAndroid Build Coastguard Worker     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
728*5e7646d2SAndroid Build Coastguard Worker     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
729*5e7646d2SAndroid Build Coastguard Worker     ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
730*5e7646d2SAndroid Build Coastguard Worker 
731*5e7646d2SAndroid Build Coastguard Worker     response = cupsDoRequest(http, request, resource);
732*5e7646d2SAndroid Build Coastguard Worker 
733*5e7646d2SAndroid Build Coastguard Worker     for (attr = ippFirstAttribute(response); attr; attr = ippNextAttribute(response))
734*5e7646d2SAndroid Build Coastguard Worker     {
735*5e7646d2SAndroid Build Coastguard Worker       if (ippGetGroupTag(attr) != IPP_TAG_PRINTER)
736*5e7646d2SAndroid Build Coastguard Worker         continue;
737*5e7646d2SAndroid Build Coastguard Worker 
738*5e7646d2SAndroid Build Coastguard Worker       if ((name = ippGetName(attr)) == NULL)
739*5e7646d2SAndroid Build Coastguard Worker         continue;
740*5e7646d2SAndroid Build Coastguard Worker 
741*5e7646d2SAndroid Build Coastguard Worker       ippAttributeString(attr, value, sizeof(value));
742*5e7646d2SAndroid Build Coastguard Worker       printf("    %s=%s\n", name, value);
743*5e7646d2SAndroid Build Coastguard Worker     }
744*5e7646d2SAndroid Build Coastguard Worker 
745*5e7646d2SAndroid Build Coastguard Worker     ippDelete(response);
746*5e7646d2SAndroid Build Coastguard Worker     puts("");
747*5e7646d2SAndroid Build Coastguard Worker   }
748*5e7646d2SAndroid Build Coastguard Worker 
749*5e7646d2SAndroid Build Coastguard Worker   httpClose(http);
750*5e7646d2SAndroid Build Coastguard Worker 
751*5e7646d2SAndroid Build Coastguard Worker   return (0);
752*5e7646d2SAndroid Build Coastguard Worker }
753*5e7646d2SAndroid Build Coastguard Worker 
754*5e7646d2SAndroid Build Coastguard Worker 
755*5e7646d2SAndroid Build Coastguard Worker /*
756*5e7646d2SAndroid Build Coastguard Worker  * 'usage()' - Show program usage.
757*5e7646d2SAndroid Build Coastguard Worker  */
758*5e7646d2SAndroid Build Coastguard Worker 
759*5e7646d2SAndroid Build Coastguard Worker static void
usage(void)760*5e7646d2SAndroid Build Coastguard Worker usage(void)
761*5e7646d2SAndroid Build Coastguard Worker {
762*5e7646d2SAndroid Build Coastguard Worker   puts("Usage: ./tlscheck [options] server [port]");
763*5e7646d2SAndroid Build Coastguard Worker   puts("       ./tlscheck [options] ipps://server[:port]/path");
764*5e7646d2SAndroid Build Coastguard Worker   puts("");
765*5e7646d2SAndroid Build Coastguard Worker   puts("Options:");
766*5e7646d2SAndroid Build Coastguard Worker   puts("  --dh        Allow DH/DHE key exchange");
767*5e7646d2SAndroid Build Coastguard Worker   puts("  --no-cbc    Disable CBC cipher suites");
768*5e7646d2SAndroid Build Coastguard Worker   puts("  --no-tls10  Disable TLS/1.0");
769*5e7646d2SAndroid Build Coastguard Worker   puts("  --rc4       Allow RC4 encryption");
770*5e7646d2SAndroid Build Coastguard Worker   puts("  --tls10     Only use TLS/1.0");
771*5e7646d2SAndroid Build Coastguard Worker   puts("  --tls11     Only use TLS/1.1");
772*5e7646d2SAndroid Build Coastguard Worker   puts("  --tls12     Only use TLS/1.2");
773*5e7646d2SAndroid Build Coastguard Worker   puts("  --tls13     Only use TLS/1.3");
774*5e7646d2SAndroid Build Coastguard Worker   puts("  --verbose   Be verbose");
775*5e7646d2SAndroid Build Coastguard Worker   puts("  -4          Connect using IPv4 addresses only");
776*5e7646d2SAndroid Build Coastguard Worker   puts("  -6          Connect using IPv6 addresses only");
777*5e7646d2SAndroid Build Coastguard Worker   puts("  -v          Be verbose");
778*5e7646d2SAndroid Build Coastguard Worker   puts("");
779*5e7646d2SAndroid Build Coastguard Worker   puts("The default port is 631.");
780*5e7646d2SAndroid Build Coastguard Worker 
781*5e7646d2SAndroid Build Coastguard Worker   exit(1);
782*5e7646d2SAndroid Build Coastguard Worker }
783*5e7646d2SAndroid Build Coastguard Worker #endif /* !HAVE_SSL */
784