1 /*
2  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #ifndef _PAPI_IMPL_H
7 #define	_PAPI_IMPL_H
8 
9 #pragma ident	"$Id: papi_impl.h,v 1.4 2005/11/04 07:29:58 njacobs Exp $"
10 
11 #include <papi.h>
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #include <time.h>
18 #include <sys/types.h>
19 #include <stdarg.h>
20 #include <uri.h>
21 
22 #include <http.h>
23 #include <ipp.h>
24 
25 /*
26  * Implementation specific types/prototypes/definitions follow
27  *
28  *
29  * Ex:
30  */
31 typedef enum {
32 	TRANSFER_ENCODING_CHUNKED,
33 	TRANSFER_ENCODING_LENGTH
34 } http_transfer_encoding_t;
35 
36 typedef struct {
37 	papi_attribute_t **attributes;
38 	char *name;
39 	char *user;
40 	char *password;
41 	int (*authCB)(papi_service_t svc);
42 	papi_encryption_t encryption;
43 	void *app_data;
44 	uri_t *uri;
45 	char *post;
46 	http_t *connection;
47 	http_transfer_encoding_t transfer_encoding;
48 } service_t;
49 
50 typedef struct job {
51 	papi_attribute_t **attributes;
52 } job_t;
53 
54 typedef struct {
55 	papi_attribute_t **attributes;
56 } printer_t;
57 
58 /* IPP glue interfaces */
59 extern ssize_t ipp_request_read(void *fd, void *buffer, size_t length);
60 extern ssize_t ipp_request_write(void *fd, void *buffer, size_t length);
61 extern papi_status_t ipp_send_request(service_t *svc,
62 				papi_attribute_t **request,
63 				papi_attribute_t ***response);
64 extern papi_status_t ipp_send_request_with_file(service_t *svc,
65 				papi_attribute_t **request,
66 				papi_attribute_t ***response, char *file);
67 extern papi_status_t ipp_send_initial_request_block(service_t *svc,
68 				papi_attribute_t **request, ssize_t file_size);
69 extern papi_status_t ipp_status_info(service_t *svc,
70 				papi_attribute_t **response);
71 extern void ipp_initialize_request(service_t *svc,
72 				papi_attribute_t ***request, uint16_t type);
73 extern void ipp_initialize_operational_attributes(service_t *svc,
74 				papi_attribute_t ***op,
75                 		papi_attribute_t **attributes);
76 extern papi_status_t ipp_to_papi_status(uint16_t status);
77 extern papi_status_t http_to_papi_status(http_status_t status);
78 
79 extern void ipp_add_printer_uri(service_t *svc, char *name,
80 				papi_attribute_t ***op);
81 
82 /* service related interfaces */
83 extern void detailed_error(service_t *svc, char *fmt, ...);
84 extern papi_status_t service_connect(service_t *svc, char *service_name);
85 
86 #ifdef __cplusplus
87 }
88 #endif
89 
90 #endif /* _PAPI_IMPL_H */
91