Unbreak LPR & IPP print transport addons.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7546 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin
2004-05-13 00:16:57 +00:00
parent 6d55406426
commit 3d046cd292
4 changed files with 202 additions and 201 deletions
+1 -3
View File
@@ -1,7 +1,5 @@
SubDir OBOS_TOP src add-ons print transports ipp ; SubDir OBOS_TOP src add-ons print transports ipp ;
UsePrivateHeaders net ;
SubDirHdrs [ FDirName $(OBOS_TOP) src add-ons print transports shared ] ; SubDirHdrs [ FDirName $(OBOS_TOP) src add-ons print transports shared ] ;
Addon IPP Addon IPP
@@ -24,5 +22,5 @@ ObjectReferences
<src!add-ons!print!transports!shared>DbgMsg.o <src!add-ons!print!transports!shared>DbgMsg.o
; ;
LinkSharedOSLibs IPP : be net stdc++.r4 ; LinkSharedOSLibs IPP : be libsocket.so libbind.so stdc++.r4 ;
+1 -3
View File
@@ -2,8 +2,6 @@ SubDir OBOS_TOP src add-ons print transports lpr ;
SubDirHdrs [ FDirName $(OBOS_TOP) src add-ons print transports shared ] ; SubDirHdrs [ FDirName $(OBOS_TOP) src add-ons print transports shared ] ;
UsePrivateHeaders net ;
Addon LPR Addon LPR
: print transport : print transport
: Lpr.cpp : Lpr.cpp
@@ -21,5 +19,5 @@ ObjectReferences
<src!add-ons!print!transports!shared>DbgMsg.o <src!add-ons!print!transports!shared>DbgMsg.o
; ;
LinkSharedOSLibs LPR : be net stdc++.r4 ; LinkSharedOSLibs LPR : be libsocket.so libbind.so stdc++.r4 ;
+3 -2
View File
@@ -1,9 +1,9 @@
SubDir OBOS_TOP src add-ons print transports shared ; SubDir OBOS_TOP src add-ons print transports shared ;
UsePrivateHeaders net ;
SetupObjectsDir ; SetupObjectsDir ;
ObjectC++Flags Socket.cpp : -DHAVE_ARPA_INET ;
Objects Objects
DbgMsg.cpp DbgMsg.cpp
Socket.cpp Socket.cpp
@@ -11,3 +11,4 @@ Objects
SocketStream2.cpp SocketStream2.cpp
; ;
+197 -193
View File
@@ -1,193 +1,197 @@
// Sun, 18 Jun 2000 // Sun, 18 Jun 2000
// Y.Takagi // Y.Takagi
#ifdef WIN32 #ifdef WIN32
#include <winsock.h> #include <winsock.h>
#else #else
#include <net/socket.h> #include <net/socket.h>
#include <net/netdb.h> #include <net/netdb.h>
#endif // WIN32 #ifdef HAVE_ARPA_INET
// inet_addr() is not defined in netdb.h anymore under BONE & sooner
#include <cstdio> #include <arpa/inet.h>
#include "Socket.h" #endif
#include "SocketStream.h" #endif // WIN32
#ifndef INADDR_NONE #include <cstdio>
#define INADDR_NONE 0xffffffff #include "Socket.h"
#endif #include "SocketStream.h"
#ifdef WIN32 #ifndef INADDR_NONE
#define EADDRINUSE WSAEADDRINUSE #define INADDR_NONE 0xffffffff
#define errno WSAGetLastError() #endif
#else
#include <errno.h> #ifdef WIN32
#endif #define EADDRINUSE WSAEADDRINUSE
#define errno WSAGetLastError()
#ifdef WIN32 #else
class WIN32SOCKET { #include <errno.h>
public: #endif
WIN32SOCKET()
{ #ifdef WIN32
WSADATA winsockdata; class WIN32SOCKET {
WSAStartup(MAKEWORD(1,1), &winsockdata); public:
} WIN32SOCKET()
~WIN32SOCKET() {
{ WSADATA winsockdata;
WSACleanup(); WSAStartup(MAKEWORD(1,1), &winsockdata);
} }
}; ~WIN32SOCKET()
{
WIN32SOCKET win32socket; WSACleanup();
#endif }
};
Socket::Socket(const char *host, int port)
: __sock(-1), __is(NULL), __os(NULL), __error(false) WIN32SOCKET win32socket;
{ #endif
__host = host;
__port = port; Socket::Socket(const char *host, int port)
__localPort = -1; : __sock(-1), __is(NULL), __os(NULL), __error(false)
__error_msg[0] = '\0'; {
__host = host;
open(); __port = port;
} __localPort = -1;
__error_msg[0] = '\0';
Socket::Socket(const char *host, int port, int localPort)
: __sock(-1), __is(NULL), __os(NULL), __error(false) open();
{ }
__host = host;
__port = port; Socket::Socket(const char *host, int port, int localPort)
__localPort = localPort; : __sock(-1), __is(NULL), __os(NULL), __error(false)
__error_msg[0] = '\0'; {
__host = host;
open(); __port = port;
} __localPort = localPort;
__error_msg[0] = '\0';
Socket::~Socket()
{ open();
close(); }
if (__is) {
delete __is; Socket::~Socket()
} {
if (__os) { close();
delete __os; if (__is) {
} delete __is;
} }
if (__os) {
istream &Socket::getInputStream() delete __os;
{ }
if (__is == NULL) { }
__is = new isocketstream(this);
} istream &Socket::getInputStream()
return *__is; {
} if (__is == NULL) {
__is = new isocketstream(this);
ostream &Socket::getOutputStream() }
{ return *__is;
if (__os == NULL) { }
__os = new osocketstream(this);
} ostream &Socket::getOutputStream()
return *__os; {
} if (__os == NULL) {
__os = new osocketstream(this);
void Socket::open() }
{ return *__os;
if (__sock == -1 && !__error) { }
sockaddr_in sin; void Socket::open()
memset(&sin, 0, sizeof(sin)); {
if (__sock == -1 && !__error) {
unsigned long inaddr;
hostent *host_info; sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
if ((inaddr = inet_addr(__host.c_str())) != INADDR_NONE) {
memcpy(&sin.sin_addr, &inaddr, sizeof(inaddr)); unsigned long inaddr;
sin.sin_family = AF_INET; hostent *host_info;
} else if ((host_info = gethostbyname(__host.c_str())) != NULL) {
memcpy(&sin.sin_addr, host_info->h_addr, host_info->h_length); if ((inaddr = inet_addr(__host.c_str())) != INADDR_NONE) {
sin.sin_family = host_info->h_addrtype; memcpy(&sin.sin_addr, &inaddr, sizeof(inaddr));
} else { sin.sin_family = AF_INET;
sprintf(__error_msg, "gethostbyname failed. errno = %d", errno); } else if ((host_info = gethostbyname(__host.c_str())) != NULL) {
__error = true; memcpy(&sin.sin_addr, host_info->h_addr, host_info->h_length);
return; sin.sin_family = host_info->h_addrtype;
} } else {
sprintf(__error_msg, "gethostbyname failed. errno = %d", errno);
if ((__sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { __error = true;
sprintf(__error_msg, "socket failed. errno = %d", errno); return;
__error = true; }
} else {
if (__localPort >= 0) { if ((__sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
sockaddr_in cin; sprintf(__error_msg, "socket failed. errno = %d", errno);
memset(&cin, 0, sizeof(cin)); __error = true;
cin.sin_family = AF_INET; } else {
cin.sin_port = htons(__localPort); if (__localPort >= 0) {
if (::bind(__sock, (sockaddr *)&cin, sizeof(cin)) != 0) { sockaddr_in cin;
sprintf(__error_msg, "bind failed. errno = %d", errno); memset(&cin, 0, sizeof(cin));
::closesocket(__sock); cin.sin_family = AF_INET;
__sock = -1; cin.sin_port = htons(__localPort);
__error = true; if (::bind(__sock, (sockaddr *)&cin, sizeof(cin)) != 0) {
} sprintf(__error_msg, "bind failed. errno = %d", errno);
} ::closesocket(__sock);
sin.sin_port = htons(__port); __sock = -1;
if (::connect(__sock, (sockaddr *)&(sin), sizeof(sin)) != 0) { __error = true;
sprintf(__error_msg, "connect failed. errno = %d", errno); }
::closesocket(__sock); }
__sock = -1; sin.sin_port = htons(__port);
__error = true; if (::connect(__sock, (sockaddr *)&(sin), sizeof(sin)) != 0) {
} sprintf(__error_msg, "connect failed. errno = %d", errno);
} ::closesocket(__sock);
} __sock = -1;
} __error = true;
}
void Socket::close() }
{ }
if (__sock != -1) { }
::shutdown(__sock, 2);
::closesocket(__sock); void Socket::close()
__sock = -1; {
} if (__sock != -1) {
} ::shutdown(__sock, 2);
::closesocket(__sock);
bool Socket::fail() const __sock = -1;
{ }
return __sock == -1 || __error; }
}
bool Socket::fail() const
bool Socket::good() const {
{ return __sock == -1 || __error;
return !fail(); }
}
bool Socket::good() const
bool Socket::operator !() const {
{ return !fail();
return fail(); }
}
bool Socket::operator !() const
int Socket::read(char *buffer, int size, int flags) {
{ return fail();
if (fail()) { }
size = 0;
} else { int Socket::read(char *buffer, int size, int flags)
size = ::recv(__sock, buffer, size, flags); {
if (size <= 0) { if (fail()) {
sprintf(__error_msg, "recv failed. errno = %d", errno); size = 0;
__error = true; } else {
close(); size = ::recv(__sock, buffer, size, flags);
} if (size <= 0) {
} sprintf(__error_msg, "recv failed. errno = %d", errno);
return size; __error = true;
} close();
}
int Socket::write(const char *buffer, int size, int flags) }
{ return size;
if (fail()) { }
size = 0;
} else { int Socket::write(const char *buffer, int size, int flags)
size = ::send(__sock, buffer, size, flags); {
if (size <= 0) { if (fail()) {
sprintf(__error_msg, "send failed. errno = %d", errno); size = 0;
__error = true; } else {
close(); size = ::send(__sock, buffer, size, flags);
} if (size <= 0) {
} sprintf(__error_msg, "send failed. errno = %d", errno);
return size; __error = true;
} close();
}
}
return size;
}