xref: /haiku/src/add-ons/print/transports/hp_jetdirect/HPJetDirectTransport.cpp (revision 4339f8be19742044831bd004c420eb09cd45537d)
1 /*****************************************************************************/
2 // HP JetDirect (TCP/IP only) transport add-on,
3 //
4 // Author
5 //   Philippe Houdoin
6 //
7 // This application and all source files used in its construction, except
8 // where noted, are licensed under the MIT License, and have been written
9 // and are:
10 //
11 // Copyright (c) 2001-2003 OpenBeOS Project
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 /*****************************************************************************/
31 
32 
33 #include <stdio.h>
34 
35 #include <Alert.h>
36 #include <Message.h>
37 #include <Directory.h>
38 #include <SupportKit.h>
39 #include <String.h>
40 #include <NetEndpoint.h>
41 
42 #include "HPJetDirectTransport.h"
43 #include "SetupWindow.h"
44 
45 // Implementation of HPJetDirectPort
46 
47 HPJetDirectPort::HPJetDirectPort(BDirectory* printer, BMessage *msg)
48 	:
49 	fPort(9100),
50 	fEndpoint(NULL),
51 	fReady(B_ERROR)
52 {
53 	fHost[0] = '\0';
54 
55 	const char *spool_path = msg->FindString("printer_file");
56 	if (spool_path && *spool_path) {
57 		BDirectory dir(spool_path);
58 
59 		dir.ReadAttr("hp_jetdirect:host", B_STRING_TYPE, 0, fHost, sizeof(fHost));
60 		if (fHost[0] == '\0') {
61 			SetupWindow *setup = new SetupWindow(&dir);
62 			if (setup->Go() == B_ERROR)
63 				return;
64 		}
65 
66 		dir.ReadAttr("hp_jetdirect:host", B_STRING_TYPE, 0, fHost, sizeof(fHost));
67 		dir.ReadAttr("hp_jetdirect:port", B_UINT16_TYPE, 0, &fPort, sizeof(fPort));
68 	}
69 
70 	fEndpoint = new BNetEndpoint(SOCK_STREAM);
71 	if ((fReady = fEndpoint->InitCheck()) != B_OK) {
72 		BAlert *alert = new BAlert("", "Fail to create the NetEndpoint!", "OK");
73 		alert->Go();
74 		return;
75 	}
76 
77 	if (fEndpoint->Connect(fHost, fPort) == B_OK) {
78 		printf("Connected to HP JetDirect printer port at %s:%d\n", fHost, fPort);
79 		fReady = B_OK;
80 	} else {
81 		BAlert *alert = new BAlert("", "Can't connect to HP JetDirect printer port!", "OK");
82 		alert->Go();
83 		fReady = B_ERROR;
84 	}
85 }
86 
87 
88 HPJetDirectPort::~HPJetDirectPort()
89 {
90 	if (fEndpoint)
91 		fEndpoint->Close();
92 	delete fEndpoint;
93 }
94 
95 
96 ssize_t
97 HPJetDirectPort::Read(void* buffer, size_t size)
98 {
99 	// printf("HPJetDirectPort::Read(%ld bytes)\n", size);
100 	if (fEndpoint)
101 		return (ssize_t) fEndpoint->Receive(buffer, size);
102 	return 0;
103 }
104 
105 
106 ssize_t
107 HPJetDirectPort::Write(const void* buffer, size_t size)
108 {
109 	// printf("HPJetDirectPort::Write(%ld bytes)\n", size);
110 	if (fEndpoint)
111 		return (ssize_t) fEndpoint->Send(buffer, size);
112 	return 0;
113 }
114 
115