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