/*************************************************************************** * Copyright (C) 2012 by Timothy Pearson * * kb9vqf@pearsoncomputing.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef TDEKRBCLIENTSOCKET_H #define TDEKRBCLIENTSOCKET_H #include #define N_CALLBACKS 3 class TQBuffer; class SASLDataPrivate; class TDEKerberosClientSocket : public TQSocket { Q_OBJECT public: TDEKerberosClientSocket(TQObject *parent=0, const char *name=0); virtual ~TDEKerberosClientSocket(); bool open(int mode); void close(); void flush(); Offset size() const; Offset at() const; bool at(Offset off); bool atEnd() const; TQ_LONG readBlock(char *data, TQ_ULONG maxlen); TQ_LONG writeBlock(const char *data, TQ_ULONG len); TQ_LONG readLine(char *data, TQ_ULONG maxlen); TQString readLine(); void writeLine(TQString); int setUsingKerberos(bool krbactive); void setServiceName(TQString name); void setServerFQDN(TQString name); private: int initializeKerberosInterface(); void freeKerberosConnection(); void sendSASLDataToNetwork(const char *buffer, unsigned length, int netfd); int getSASLDataFromNetwork(char *buf, int trunclen, bool shouldblock=true); int transmitEncryptedData(int fd, const char* readbuf, int cc); int receiveEncryptedData(char *buf, unsigned int trunclen, bool shouldblock=true); private: bool m_kerberosRequested; TQString m_serviceName; TQString m_serverFQDN; int m_criticalSection; TQBuffer* m_buffer; long m_bufferLength; bool* m_canary; private: SASLDataPrivate *saslData; unsigned int m_negotiatedMaxBufferSize; }; #endif // TDEKRBCLIENTSOCKET_H