Source Code (Use browser search to find items of interest.)

Class Index

kfinger'FingerProtocol (./kdenetwork/kfinger/finger.h:7)

class FingerProtocol : public QObject {
Q_OBJECT
	public:
                FingerProtocol(char * buff);
		~FingerProtocol();
                void  writeString(QString s);
		bool stopFlag;
		bool connection(  const char * host,int port); 

	protected:
		QString st;
                QSocketNotifier *sockNotif;
                QSocketNotifier *sockNotif1;
		char *s;
		int  sock;          
	signals:
	  void connectionRefused();
	  void update();
          void finish();	
        public slots:
          void readBuff( int);
	  void writeBuff(int );
      };

kfinger'FingerProtocol::FingerProtocol() (./kdenetwork/kfinger/finger.C:27)

FingerProtocol::FingerProtocol(/*const char * host,int port,*/char *buff) 
{
stopFlag=true ;
s=buff; 
}



kfinger'FingerProtocol::~FingerProtocol() (./kdenetwork/kfinger/finger.C:34)

FingerProtocol::~FingerProtocol() 
{
    close( sock); 
}



kfinger'FingerProtocol::connection() (./kdenetwork/kfinger/finger.C:40)

bool FingerProtocol::connection(  const char * host,int port) 
{
  sock=::socket(PF_INET,SOCK_STREAM,0);
  if (sock < 0) return false;        
  
  struct sockaddr_in server;
  struct hostent *hostinfo;
  server.sin_family = AF_INET;
  server.sin_port = htons(port);
  hostinfo = gethostbyname(host);
  if ( !hostinfo )
    {
	  debug("Unknown host: %s ", strerror(errno));
	  ::close( sock );
	  sock = -1;
	  return false;	    
    }
  server.sin_addr = *(struct in_addr*) hostinfo->h_addr;      
  fcntl(sock,F_SETFL,(fcntl(sock,F_GETFL)|O_NDELAY));

  errno = 0;
  if (::connect(sock, (struct sockaddr*)(&server), sizeof(server))==-1)
      if(errno != EINPROGRESS && errno != EWOULDBLOCK){
          ::close( sock );
          sock = -1;
          return false;   
      }

    sockNotif = new QSocketNotifier(sock,QSocketNotifier::Read,this);
    QObject::connect(sockNotif, SIGNAL(activated(int )),this,SLOT(readBuff(int ))); 

    sockNotif1 = new QSocketNotifier(sock,QSocketNotifier::Write,this);
    QObject::connect(sockNotif1, SIGNAL(activated(int )),this,SLOT(writeBuff(int ))); 
     sockNotif->setEnabled(TRUE);
  return true;       
}




kfinger'FingerProtocol::readBuff() (./kdenetwork/kfinger/finger.C:79)

void FingerProtocol::readBuff( int     ) 
{
 // warning("read buff" );
  sockNotif->setEnabled(FALSE);
  char *b;
  b=s;
  char c,n;
  int mn = recv( sock,   s    , 1, MSG_PEEK );
  if ( mn <= 0 ) {
	stopFlag=false;  
        close( sock); 
        emit finish();
	}
  else
	{
	 int bu=0;
	do  {
	    
	     n=read(sock,&c,1);
	     bu++;
	     if (c!='\r') 
	         *b++=c;
	    } while (n==1 && bu<1000);       
	 *b=0;    
	// warning("%i",bu);
         update();
         sockNotif->setEnabled(TRUE);
         }
 
}


kfinger'FingerProtocol::writeBuff() (./kdenetwork/kfinger/finger.C:110)

void FingerProtocol::writeBuff(int  ) 
{
    unsigned int len;

    int val;
    len=sizeof(val); 
    getsockopt(sock,SOL_SOCKET,SO_ERROR,(char *) &val,&len );                   
//    warning("error %d ",val);
sockNotif1->setEnabled(FALSE);

    if(val==0)  
	write(sock,st,strlen(st));
   else if(val==111)
    {
      connectionRefused();
//     warning("connection refused");
    }
}


kfinger'FingerProtocol::writeString() (./kdenetwork/kfinger/finger.C:129)

void FingerProtocol::writeString(QString s)
{
  st=s;
  sockNotif1->setEnabled(TRUE);

}