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(B_ERROR) 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_UINT16_TYPE, 0, &fPort, sizeof(fPort)); 65 }; 66 67 fEndpoint = new BNetEndpoint(SOCK_STREAM); 68 if ((fReady = fEndpoint->InitCheck()) != B_OK) { 69 BAlert *alert = new BAlert("", "Fail to create the NetEndpoint!", "OK"); 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 = B_OK; 77 } else { 78 BAlert *alert = new BAlert("", "Can't connect to HP JetDirect printer port!", "OK"); 79 alert->Go(); 80 fReady = B_ERROR; 81 }; 82 } 83 84 85 HPJetDirectPort::~HPJetDirectPort() 86 { 87 if (fEndpoint) 88 fEndpoint->Close(); 89 delete fEndpoint; 90 } 91 92 93 ssize_t 94 HPJetDirectPort::Read(void* buffer, size_t size) 95 { 96 // printf("HPJetDirectPort::Read(%ld bytes)\n", size); 97 if (fEndpoint) 98 return (ssize_t) fEndpoint->Receive(buffer, size); 99 return 0; 100 } 101 102 103 ssize_t 104 HPJetDirectPort::Write(const void* buffer, size_t size) 105 { 106 // printf("HPJetDirectPort::Write(%ld bytes)\n", size); 107 if (fEndpoint) 108 return (ssize_t) fEndpoint->Send(buffer, size); 109 return 0; 110 } 111 112