xref: /haiku/src/add-ons/print/transports/hp_jetdirect/HPJetDirectTransport.cpp (revision fd17f6d4b51bded379548c047f37e511f8c1cde0)
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 	: fPort(9100), fEndpoint(NULL), fReady(false)
49 {
50 	fHost[0] = '\0';
51 
52 	const char *spool_path = msg->FindString("printer_file");
53 	if (spool_path && *spool_path) {
54 		BDirectory dir(spool_path);
55 
56 		dir.ReadAttr("hp_jetdirect:host", B_STRING_TYPE, 0, fHost, sizeof(fHost));
57 		if (fHost[0] == '\0') {
58 			SetupWindow *setup = new SetupWindow(&dir);
59 			if (setup->Go() == B_ERROR)
60 				return;
61 		}
62 
63 		dir.ReadAttr("hp_jetdirect:host", B_STRING_TYPE, 0, fHost, sizeof(fHost));
64 		dir.ReadAttr("hp_jetdirect:port", B_INT16_TYPE, 0, &fPort, sizeof(fPort));
65 	};
66 
67 	fEndpoint = new BNetEndpoint(SOCK_STREAM);
68 	if (fEndpoint->InitCheck() != B_NO_ERROR) {
69 		BAlert *alert = new BAlert("", "Fail to create the NetEndpoint!", "Damn");
70 		alert->Go();
71 		return;
72 	};
73 
74 	if (fEndpoint->Connect(fHost, fPort) == B_OK) {
75 		printf("Connected to HP JetDirect printer port at %s:%d\n", fHost, fPort);
76 		fReady = true;
77 	} else {
78 		BAlert *alert = new BAlert("", "Can't connect to HP JetDirect printer port!", "Bad luck");
79 		alert->Go();
80 	};
81 }
82 
83 
84 HPJetDirectPort::~HPJetDirectPort()
85 {
86 	delete fEndpoint;
87 }
88 
89 
90 ssize_t
91 HPJetDirectPort::Read(void* buffer, size_t size)
92 {
93 	// printf("HPJetDirectPort::Read(%ld bytes)\n", size);
94 	return (ssize_t) fEndpoint->Receive(buffer, size);
95 }
96 
97 
98 ssize_t
99 HPJetDirectPort::Write(const void* buffer, size_t size)
100 {
101 	// printf("HPJetDirectPort::Write(%ld bytes)\n", size);
102 	return (ssize_t) fEndpoint->Send(buffer, size);
103 }
104 
105